萨瓦内

AGPL通知

您可以从以下网址下载Savane的相应源代码:
https://git.savannah.nongnu.org/cgit/administration/savane.git/snapshot/savane-ee12238e014f5af2ef8f9635f8f5cd8a1591e64.tar.gz
http://savannah.nongu.org/news/atom.php?group=gsequencer 高级Gtk+序列器-新闻 2024-04-17T13:41:04+00:00 https://savannah.nongu.org/news/?id=10623 高级Gtk+Sequencer 6.8.x版 2024-04-17T13:40:23+00:00 乔·克雷赫曼

GSequencer版本6.8.3对沙盒环境进行了许多改进。因此,我引入了两个新的配置交换机。

快照沙盒:


./configure--启用快照存储箱


Flatpak沙箱:


./conifgure--启用flatpak沙盒



AgsFileWidget在访问目录和文件之前检查它们的权限。此外,它确实能正确处理根目录。

GSequencer考虑XDG_*_DIR环境变量


测试并使用以下环境变量:

  • HOME或SNAP_USER_DATA
  • XDG_DESKTOP_DIR公司
  • XDG_信息_方向
  • XDG_MUSIC_DIR公司
  • XDG_视频_红外
  • XDG_DOWNLOAD_DIR公司
  • XDG_文档_目录


具有改进的沙盒FS交互的GSequencer


打开的文件对话框由上述配置开关有条件地构建。将环境变量AGS_SNAP_PATH视为drumkits、Soundfont2或SFZ文件的默认位置。




作者:Joöl

https://savannah.nongu.org/news/?id=10596 高级Gtk+Sequencer 6.5.x版 2024-02-11T17:06:15+00:00 乔·克雷赫曼

GSequencer分支6.5.x带来了一些UI改进。像固定符号一样,
自动化和波形编辑选择。此外,自动化选择
其他修复。

编辑器中组合工具栏的工具对话框已经看到了代码的改进。
这些是带有固定瞬态的对话框,用于映射它们:

  • 改进的AgsCropNoteDialog
  • 改进的AgsMoveNoteDialog
  • 改进的AgsSelectNoteDialog
  • 改进的AgsPositionNotationCursorDialog
  • 改进的AgsSelectAccelerationDialog
  • 改进的AgsRampAccelerationDialog
  • 改进的AgsPositionAutomationCursorDialog
  • 改进的AgsSelectBufferDialog
  • 改进的AgsPositionWaveCursorDialog
  • 改进的AgsRampMarkerDialog


AgsConnectable接口也已正确初始化。此外,我们
在加载复合工具栏或自动编辑更改时调用ags_applicable_reset()。




作者:Joöl

https://savannah.nongu.org/news/?id=10582 高级Gtk+序列器版本6.3.5 2024-01-19T11:53:24+00:00 乔·克雷赫曼

GSequencer分支6.3.x引入了一些新的装箱类型,以提供字符转换:

  • Ags文件实用程序
  • AgsRegexUtil公司


进一步注意256偏移和攻击得到了改进。因此,通过实现以下功能完成了声卡接口:

  • ags_soundcard_get_note_256th_attack_of_16th_pulse()
  • ags_soundcard_get_note_256th_attack_of_16th_pulse_position()
  • ags_soundcard_get_note_256th_attack_at_position()
  • ags_soundcard_get_note_256th_attack_position()


GSequencer不允许比第16个脉冲的音符更小的分辨率。注释256偏移是提供更高分辨率的附加层,但在缓冲时间内可能会出现多次。


AgsFileUtil从文件读取/写入C类型


AgsFileUtil提供了将C原语类型从/转换为字符串的函数。类似于以下内容的转换:

  • 金特
  • 吉尼特
  • 金特64
  • 金币64
  • 玻璃纤维
  • G加倍
  • AgsComplex公司


它还为特定于本地化的浮点表示提供了一些特例,或者。

AgsRegexUtil公司


AgsRegexUtil为glibc regex函数提供包装器,并支持字符转换。因此,2个函数已弃用:

  • ags_regcomp()
  • ags_regexec()






作者:Joöl

https://savannah.nongu.org/news/?id=10518 发布了高级Gtk+Sequencer v6.1.0 2023-09-28T04:55:19+00:00 乔·克雷赫曼

GSequencer 6.1.0版支持更高的x偏移分辨率。
在此之前,只有第16个键可以弹奏。重构后
libags_audio.so和libgsequencer.so,我们可以编辑音符第256个偏移量。

扩展了AgsSoundcard接口并实现了新功能


AgsSoundcard接口被1个函数扩展以检索注释
第256个偏移与第16个脉冲对齐。ags_soundcard_get_note_256th_offset()
函数有2个返回位置用于x 256偏移量的边界。


void ags_soundcard_get_note_256th_offset(AgsSoundcard*声卡,
guint*offset_lower,
guint*offset_upper);



offset_lower和offset_upper可以改变每个声卡tic并给出
您是当前tic和适用注释的范围x 256偏移量。

所有声卡后端都实现了新的接口功能。

实现了注释x 256偏移量到MIDI增量时间的转换


这两个函数与注释256中的MIDI定时计算有关
偏移支持。

  • ags_midi_util_delta_time_to_note_256th_offset()
  • 标记_ midi_util_note_256th_offset_to_delt_time()


重构实用程序源代码文件


这些装箱类型进行了重构,以支持注释256偏移量。

  • AgsSynchUtil软件
  • AgsFM同步实用程序
  • AgsSF2合成土
  • AgsSFZSynthUtil软件
  • AgsNoiseUtil公司
  • AgsChorusUtil公司
  • AgsCommonPitchUtil公司
  • AgsFastPitchUtil公司
  • AgsHQPitchUtil公司
  • AgsFluid插值无实用程序
  • AgsFluid插值线性实用程序
  • AgsFluidInterpolate4thOrderUtil公司
  • AgsFluidInterpolate7thOrderUtil公司
  • AgsRemoloUtil公司
  • AgsWahWahUtil公司


以256倍精度编辑钢琴卷


钢琴编辑器允许您编辑音符x 256偏移量或捕捉缩放。被改进的
编辑器对话框的相关任务。


不推荐的符号


这些实用程序函数现已弃用:

  • ags_common_pitch_util_get_vibrato_lfo_offset()
  • ags_common_pitch_util_set_vibrao_lfo_offset()
  • ags_hq_pitch_util_get_vibrao_lfo_offset()
  • ags_hq_pitch_util_set_vibrao_lfo_offset()
  • ags_fast_pitch_util_get_vibrato_lfo_offset()
  • ags_fast_pitch_util_set_vibrao_lfo_offset()
  • ags_fluid_interpolate_none_util_get_可控震源_lfo_offset()
  • ags_fluid_interpolate_none_util_set_vibrao_lfo_offset()
  • ags_fluid_interpolate_linear_util_get_vibrato_lfo_offset()
  • ags_fluid_interpolate_linear_util_set_vibrato_lfo_offset()
  • ags_fluid_interpolate_4th_order_util_get_可控震源_lfo_offset()
  • ags_fluid_interpolate_4th_order_util_set_vibrato_lfo_offset()
  • ags_fluid_interpolate_7th_order_util_get_可控震源_lfo_offset()
  • ags_fluid_interpolate_7th_order_util_set_vibrato_lfo_offset()
https://savanah.nongnu.org/news/?id=10503(中文) 发布了高级Gtk+Sequencer v6.0.0 2023-08-21T11:48:52+00:00 乔·克雷赫曼

GSequencer版本6.0.0发布。初始MIDI v2.0支持,具有测试、放置和获取MIDI消息的实用功能。

最近,实现了MIDI UMP 1.1消息格式。以下是位于ags/audio/midi/ags_midi_ump_util中的新函数。【信道】:

  • ags_midi_ump_util_get_type()
  • ags_midi_ump_util_alloc()
  • ags_midi_ump_util_free()
  • ags_midi_ump_util_copy()
  • ags_midi_ump_util_is_system_common()
  • 带有sysex()的ags_midi_ump_util_is_data_message
  • ags_midi_ump_util_is_data_message()
  • ags_midi_ump_util_is_stream_message()
  • ags_midi_ump_util_is_endpoint_discovery()
  • ags_midi_ump_util_put_endpoint_discovery()
  • ags_midi_ump_util_get_endpoint_discovery()
  • ags_midi_ump_util_is_endpoint_info_notification()
  • ags_midi_ump_util_put_endpoint_info_notification()
  • 标签_ midi_ump_util_get_endpoint_info_notification()
  • ags_midi_ump_util_is_device_identity_notification()
  • ags_midi_ump_util_put_device_identity_notification()
  • ags_midi_ump_util_get_device_identity_notification()
  • ags_midi_ump_util_is_endpoint_name通知()
  • ags_midi_ump_util_put_endpoint_name通知()
  • ags_midi_ump_util_get_endpoint_name通知()
  • ags_midi_ump_util_is_product_instance_id_notification()
  • ags_midi_ump_util_put_product_instance_id_notification()
  • ags_midi_ump_util_get_product_instance_id_notification()
  • ags_midi_ump_util_is_stream_configuration_request()
  • ags_midi_ump_util_put_stream_configuration_request()
  • ags_midi_ump_util_get_stream_configuration_request()
  • ags_midi_ump_util_is_stream_configuration_notification()
  • ags_midi_ump_util_put_stream_configuration_notification()
  • ags_midi_ump_util_get_stream_configuration_notification()
  • 标签_ midi_ump_util_is_function_block_discovery()
  • ags_midi_ump_util_put_function_block_discovery()
  • ags_midi_ump_util_get_function_block_discovery()
  • ags_midi_ump_util_is_function_block_info_notification()
  • ags_midi_ump_util_put_function_block_info_notification()
  • 标签_ midi_ump_util_get_function_block_info_notification()
  • ags_midi_ump_util_is_function_block_name通知()
  • ags_midi_ump_util_put_function_block_name通知()
  • ags_midi_ump_util_get_function_block_name通知()
  • ags_midi_ump_util_is_start_of_clip()
  • ags_midi_ump_util_put_start_of_clip()
  • ags_midi_ump_util_get_start_of_clip()
  • ags_midi_ump_util_is_end_of_clip()
  • ags_midi_ump_util_put_end_of_clip()
  • ags_midi_ump_util_get_end_of_clip()
  • ags_midi_ump_util_is_noop()
  • ags_midi_ump_util_put_noop()
  • ags_midi_ump_util_get_noop()
  • ags_midi_ump_util_is_jr_clock()
  • ags_midi_ump_util_put_jr_clock()
  • ags_midi_ump_util_get_jr_clock()
  • ags_midi_ump_util_is_jr_timestamp()
  • ags_midi_ump_util_put_jr_timestamp()
  • ags_midi_ump_util_get_jr_timestamp()
  • ags_midi_ump_util_is_delta_clock_ticks_per_quarter_note()
  • ags_midi_ump_util_put_delta_clock_ticks_per_quarter_note()
  • ags_midi_ump_util_get_delta_clock_ticks_per_quarter_note()
  • ags_midi_ump_util_is_delta_clock_ticks_since_last_event()
  • ags_midi_ump_util_put_delta_clock_ticks_since_last_event()
  • ags_midi_ump_util_get_delta_clock_ticks_since_last_event()
  • ags_midi_ump_util_is_midi1_channel_voice()
  • ags_midi_ump_util_is_midi1_note_off()
  • ags_midi_ump_util_put_midi1_note_off()
  • ags_midi_ump_util_get_midi1_note_off()
  • ags_midi_ump_util_is_midi1_note_on()
  • ags_midi_ump_util_put_midi1_note_on()
  • ags_midi_ump_util_get_midi1_note_on()
  • ags_midi_ump_util_is_midi1_复音_后奏()
  • ags_midi_ump_util_put_midi1_polymetric_aftertouch()标签
  • ags_midi_ump_util_get_midi1_polyonic_aftertouch()
  • ags_midi_ump_util_is_midi1_control_change()
  • ags_midi_ump_util_put_midi1_control_change()
  • ags_midi_ump_util_get_midi1_control_change()
  • ags_midi_ump_util_is_midi1_program_change()(标签_ midi_ump_util_is_midi1_program_change())
  • ags_midi_ump_util_put_midi1_程序更改()
  • ags_midi_ump_util_get_midi1_程序更改()
  • ags_midi_ump_util_is_midi1_通道压力()
  • ags_midi_ump_util_put_midi1_通道压力()
  • ags_midi_ump_util_get_midi1_通道压力()
  • ags_midi_ump_util_is_midi1_俯仰_弯曲()
  • ags_midi_ump_util_put_midi1_俯仰_弯曲()
  • ags_midi_ump_util_get_midi1_俯仰_弯曲()
  • ags_midi_ump_util_is_midi2_channel_voice()
  • ags_midi_ump_util_is_midi2_note_off()
  • ags_midi_ump_util_put_midi2_note_off()
  • ags_midi_ump_util_get_midi2_note_off()
  • ags_midi_ump_util_is_midi2_note_on()
  • ags_midi_ump_util_put_midi2_note_on()
  • ags_midi_ump_util_get_midi2_note_on()
  • ags_midi_ump_util_is_midi2_polyonic_aftertouch()
  • ags_midi_ump_util_put_midi2_polyphonic_aftertouch()标签
  • ags_midi_ump_util_get_midi2_polyonic_aftertouch()
  • ags_midi_ump_util_is_midi2_注册的per_note_controller()
  • ags_midi_ump_util_put_midi2_注册_per_note_controller()
  • ags_midi_ump_util_get_midi2_注册_per_note_controller()
  • ags_midi_ump_util_is_midi2_assignable_per_note_controller()
  • ags_midi_ump_util_put_midi2_assignable_per_note_controller()
  • ags_midi_ump_util_get_midi2_assignable_per_note_controller()
  • ags_midi_ump_util_is_midi2_per_note_management()
  • ags_midi_ump_util_put_midi2_per_note_管理()
  • ags_midi_ump_util_get_midi2_per_note_management()
  • ags_midi_ump_util_is_midi2_control_change()
  • ags_midi_ump_util_put_midi2_control_change()
  • ags_midi_ump_util_get_midi2_control_change()
  • ags_midi_ump_util_is_midi2_rpn_俯仰_弯曲_范围()
  • ags_midi_ump_util_put_midi2_rpn_俯仰_弯曲_范围()
  • 标签_ midi_ump_util_get_midi2_rpn_pitch_bend_range()
  • ags_midi_ump_util_is_midi2_rpn_carrose_tuning()
  • ags_midi_ump_util_put_midi2_rpn_carrose_tuning()
  • ags_midi_ump_util_get_midi2_rpn_carrose_tuning()
  • ags_midi_ump_util_is_midi2_rpn_tuning_program_change()
  • ags_midi_ump_util_put_midi2_rpn_tuning_program_change()
  • ags_midi_ump_util_get_midi2_rpn_tuning_program_change()
  • ags_midi_ump_util_is_midi2_rpn_tuning_bank_select()
  • ags_midi_ump_util_put_midi2_rpn_tuning_bank_select()
  • ags_midi_ump_util_get_midi2_rpn_tuning_bank_select()
  • ags_midi_ump_util_is_midi2_rpn_mpe_mcm()
  • ags_midi_ump_util_put_midi2_rpn_mpe_mcm()
  • ags_midi_ump_util_get_midi2_rpn_mpe_mcm()
  • ags_midi_ump_util_is_midi2_程序更改()
  • ags_midi_ump_util_put_midi2_程序更改()
  • ags_midi_ump_util_get_midi2_程序更改()
  • ags_midi_ump_util_is_midi2_通道压力()
  • ags_midi_ump_util_put_midi2_通道压力()
  • ags_midi_ump_util_get_midi2_通道压力()
  • ags_midi_ump_util_is_midi2_俯仰_弯曲()
  • ags_midi_ump_util_put_midi2_俯仰_弯曲()
  • ags_midi_ump_util_get_midi2_俯仰_弯曲()
  • ags_midi_ump_util_is_midi2_per_note_pitch_bend()标签
  • ags_midi_ump_util_put_midi2_per_note_pitch_bend()
  • ags_midi_ump_util_get_midi2_per_note_pitch_bend()
  • ags_midi_ump_util_is_flex_set_tempo()
  • ags_midi_ump_util_put_flex_set_tempo()
  • ags_midi_ump_util_get_flex_set_tempo()
  • ags_midi_ump_util_is_flex_set_time_signature()
  • ags_midi_ump_util_put_flex_set_time_signature()
  • ags_midi_ump_util_get_flex_set_time_signature()
  • ags_midi_ump_util_is_flex_set_metronome()
  • ags_midi_ump_util_put_flex_set_metronome()
  • ags_midi_ump_util_get_flex_set_metronome()
  • ags_midi_ump_util_is_flex_set_key_signature()
  • ags_midi_ump_util_put_flex_set_key_signature()
  • ags_midi_ump_util_get_flex_set_key_signature()
  • ags_midi_ump_util_is_flex_set_chord_name()
  • 标签_ midi_ump_util_put_flex_set_chord_name()
  • ags_midi_ump_util_get_flex_set_chord_name()
  • ags_midi_ump_util_is_flex_set_text()



将AgsMidiBufferUtil重构为AgsMidiSmfUtil


ags_midi_buffer_util中的所有函数。[ch]已被移动并重命名为ags_midi_smf_util。[中文]。

重构的AgsAudioThread和AgsChannelThread嵌套同步标志


音频和通道线程的标志已重命名。

重构的AgsOscBufferUtil


由于附加的函数参数,ABI被破坏,实用程序结构也被传递。

重构的AgsMidiUtil


由于附加的函数参数,ABI被破坏,实用程序结构也被传递。




作者:Joöl

https://savannah.nongu.org/news/?id=10496 发布了高级Gtk+Sequencer v5.5.0 2023-08-05T10:21:52+00:00 乔·克雷赫曼

GSequencer 5.5.0版发布,包括MIDI CI 1.2版支持。头文件位于此处:

  • ags/audio/midi/ags_midi_ci_util。小时


实用程序标头具有put和get函数。主要版本和次要版本尚未绑定到MIDI CI 1.2版本。在未来的版本中,可能会以向后兼容的方式支持其他版本。

以下是添加的MIDI CI 1.2版符号列表:

  • ags_midi_ci_util_alloc()
  • ags_midi_ci_util_copy()
  • ags_midi_ci_util_free()
  • ags_midi_ci_util_generate_muid()
  • ags_midi_ci_util_get_ack()
  • ags_midi_ci_util_get_confirm_protocol_type()
  • ags_midi_ci_util_get_confirm_protocol_type_esetted()
  • ags_midi_ci_util_get_confirm_protocol_type_reply()
  • ags_midi_ci_util_get_discovery()
  • ags_midi_ci_util_get_discovery_reply()
  • ags_midi_ci_util_get_end_of_message_rereport()
  • ags_midi_ci_util_get_get_property_data()
  • ags_midi_ci_util_get_get_property_data_reply()
  • ags_midi_ci_util_get_ininitiate_procol_协议()
  • ags_midi_ci_util_get_initiate_protocol_negation_reply()
  • ags_midi_ci_util_get_invalidate_muid()
  • ags_midi_ci_util_get_message_rereport()
  • ags_midi_ci_util_get_message_rereport_reply()
  • ags_midi_ci_util_get_muid()
  • ags_midi_ci_util_get_nak()
  • ags_midi_ci_util_get_process_capabilities()
  • ags_midi_ci_util_get_process_capabilities_reply()
  • ags_midi_ci_util_get_profile()
  • ags_midi_ci_util_get_profile_added()
  • ags_midi_ci_util_get_profile_disabled_report()
  • ags_midi_ci_util_get_profile_enabled_report()
  • ags_midi_ci_util_get_profile_removed()
  • ags_midi_ci_util_get_profile_reply()
  • ags_midi_ci_util_get_profile_specific_data()
  • ags_midi_ci_util_get_property_exchange_capabilities()
  • ags_midi_ci_util_get_property_exchange_capabilities_reply()
  • ags_midi_ci_util_get_set_property_data()
  • ags_midi_ci_util_get_set_property_data_reply()
  • ags_midi_ci_util_get_set_protocol_type()
  • ags_midi_ci_util_get_subscription()
  • ags_midi_ci_util_get_subscription_reply()标签
  • ags_midi_ci_util_get_type()
  • ags_midi_ci_util_put_ack()
  • ags_midi_ci_util_put_confirm_protocol_type()
  • ags_midi_ci_util_put_confirm_protocol_type_esetted()
  • ags_midi_ci_util_put_confirm_protocol_type_reply()
  • ags_midi_ci_util_put_discovery()
  • ags_midi_ci_util_put_discovery_reply()
  • ags_midi_ci_util_put_end_of_message_rereport()
  • ags_midi_ci_util_put_get_property_data()
  • ags_midi_ci_util_put_get_property_data_reply()
  • ags_midi_ci_util_put_initiate_protocol_negotiation()
  • ags_midi_ci_util_put_initiate_protocol_negation_reply()
  • ags_midi_ci_util_put_invalidate_muid()
  • ags_midi_ci_util_put_message_rereport()
  • ags_midi_ci_util_put_message_rereport_reply()
  • ags_midi_ci_util_put_muid()
  • ags_midi_ci_util_put_nak()
  • ags_midi_ci_util_put_process_capabilities()
  • ags_midi_ci_util_put_process_capabilities_reply()
  • ags_midi_ci_util_put_profile()
  • ags_midi_ci_put_profile_aded()
  • ags_midi_ci_util_put_profile_disabled_report()
  • ags_midi_ci_util_put_profile_enabled_report()
  • ags_midi_ci_util_put_profile_removed()
  • ags_midi_ci_util_put_profile_reply()
  • ags_midi_ci_util_put_profile_specific_data()
  • ags_midi_ci_util_put_property_exchange_capabilities()
  • ags_midi_ci_util_put_property_exchange_capabilities_reply()
  • ags_midi_ci_util_put_set_property_data()
  • ags_midi_ci_util_put_set_property_data_reply()
  • ags_midi_ci_util_put_set_protocol_type()
  • ags_midi_ci_util_put_subscription()
  • ags_midi_ci_util_put_subscription_reply()





作者:Joöl

https://savannah.nongu.org/news/?id=10376 发布了高级Gtk+Sequencer v5.3.0 2023-06-04T22:29:11+00:00 若埃尔·克雷赫曼

这个版本带来了一个新的重要功能,可以对每台机器进行格式和采样调整。

我试图对soundfont2文件使用不同的格式。我将AgsSF2Synth设置为24位,而不是16位的声卡属性。由此产生的声音质量有了很大的提高。

一目了然


改进无处不在,但并不总是得到用户的认可。如果您必须维护大约100万行代码,那么您需要可持续的代码。这次再次重构插件。迈向ags-fx引擎是一件大事。

明天见。干杯。




作者:Joöl

https://savannah.nongu.org/news/?id=10373 发布高级Gtk+Sequencer v5.2.0 2023-05-31T15:39:47+00:00 乔·克雷赫曼

这个新版本允许您使用AgsSFZSynth和AgsSF2Synth的附加控件修改声音的不同效果。因此,代码中添加了以下内容:

  • ags-fx-trevelo新型效果处理器
  • 带有附加振动端口的ags-fx-sf2-synth
  • 带有附加可控震源端口的ags-fx-sfz-synth
  • ags-fx-wah-wah新型效果处理器


进一步的ags-fx-lv2有了很大的改进。

颤音效应


颤音效果添加了一个新的实用程序文件:

  • ags/audio/ags_tremolo_util。[中文]


所以它的效果处理器:

  • ags/audio/fx/ags_fx_tremolo_audio。[中文]
  • ags/audio/fx/ags_fx_tremolo_audio_processor。[中文]
  • ags/audio/fx/ags_fx_tremolo_channel。[中文]
  • ags/audio/fx/ags_fx_tremolo_channel处理器。[中文]
  • ags/audio/fx/ags_fx_tremolo_recycling。[中文]
  • ags/audio/fx/ags_fx_tremolo_audio_signal。[中文]


振动效果处理器


颤音效果已集成到现有的音高实用程序文件中,因此他们可以看到其他功能:

  • ags/audio/ags_fast_pitch_util。[中文]
  • ags/audio/ags_hq_pitch_util。[中文]
  • ags/audio/ags_fluid_interpolate_none_util。[中文]
  • ags/audio/ags_fluid_interpolate_linear_util。[中文]
  • ags/audio/ags_fluid_interpolate_4th_order_util。[中文]
  • ags/audio/ags_fluid_interpolate_7th_order_util。[中文]


可控震源的字段应用于:

  • ags/audio/fx/ags_fx_sf2_synth_audio_signal。[中文]
  • ags/audio/fx/ags_fx_sfz_synth_audio_signal。[中文]


wah-wah效应处理器


wah-wah效应是使用现有的包络线和集成的附加场来控制wah-wah-LFO的:

  • ags/audio/ags_envelope_util。[中文]


效果处理器提供其他文件:

  • ags/audio/fx/ags_fx_wah_wah_audio。[中文]
  • ags/audio/fx/ags_fx_wah_wah_audio_processor。[中文]
  • ags/audio/fx/ags_fx_wah_wah频道。[中文]
  • ags/audio/fx/ags_fx_wah_wah_channel处理器。[中文]
  • ags/audio/fx/ags_fx_wah_wah回收。[中文]
  • ags/audio/fx/ags_fx_wah_wah_audio_signal。[中文]


AgsSF2Synth和AgsSFZSynth


这两种仪器都有额外的控制装置:

  • 震颤痛
  • 颤音LFO深度
  • 颤音LFO频率
  • 颤音调谐
  • 振动增益
  • 振动LFO深度
  • 低频振荡频率
  • 振动调谐
  • wah-wah攻击
  • wah-wah衰变
  • 哇-哇-维持
  • wah-wah释放
  • wah-wah比率
  • wah-wah LFO深度
  • wah-wah LFO频率
  • wah-wah调谐


固定到ags-fx-lv2


效果处理器ags-fx-lv2已被重构。它遵循适当的初始化并保持适当的状态。现在,它可以区分输入或输出MIDI事件/原子端口。之前,它假设它只有输入端口,但情况并非总是如此,它可能两者都有。


重构ags_volume_util。c(c)


ags_volume_util.c文件通过缩短代码进行了改进,消除了结构访问开销。

https://savannah.nongu.org/news/?id=10352 发布了高级Gtk+Sequencer v5.0.0 2023-04-24T18:22:02+00:00 乔·克雷赫曼

GSequencer在这个新的主要版本中看到了一些涉及许多文件的重构。第一个标志枚举类型尚未使用,第二个VST3 API引用已由我编写。

我已经调整了AgsSF2Synth和AgsSFZSynth的WAV 1的倍频程下限/上限控制,范围从-12.0到12.0。

libags_vst.so也有一些改进。修复了一个函数名中的输入错误。

删除了不需要的符号。

https://savannah.nongu.org/news/?id=10328 gsequencer-2-5回传libags_audio.4.so 2023-03-18T14:18:27+00:00 乔·克雷赫曼

大家好

我打算将libags_audio.4so回端口到Gtk-2.x接口。

干杯,乔埃尔

https://savannah.nongu.org/news/?id=10151 GSequencer版本4.0.5发布 2022-05-24T17:54:00+00:00 若埃尔·克雷赫曼

今天,我们发布了新的GSequencer主版本4.0.0。

我在4.0.x版本的分支上工作了6个月。我们迁移到了Gtk4和libsoup-3.0。

迁移到Gtk4是一项艰巨的任务。实现GtkOrientable是一件事,当然也要删除GtkContainer。但通过这些更改,我们现在有了更好的libgsequencer.so。AgsConnectableFlags的引入影响了以下共享库中的许多对象:libags.so、libags_thread.so、libags _server.so和libags_audio.so。

汉堡菜单取代了传统的菜单栏,但它仍然可用。编辑器的机器选择器小部件有一些更改。您可以通过弹出菜单启用或禁用计算机。机器按照机器的立式箱的顺序排列。

波形编辑器剪贴板已修复。

实用程序函数的统一API


对于所有音频处理函数,我们都有一个匹配的实用程序头。音频处理函数绑定到盒装类型。此结构允许您预先设置内存和调整参数。

  • ags/音频/ags_chorus_util。小时
  • ags/audio/ags_envelope_util。小时
  • ags/audio/ags_fast_pitch_util。小时
  • ags/audio/ags_fluid_iir_filter_util。小时
  • ags/audio/ags_fluid_interpolate_4th_order_util。小时
  • ags/audio/ags_fluid_interpolate_7th_order_util。小时
  • ags/audio/ags_fluid_interpolate_linear_util。小时
  • ags/audio/ags_fluid_interpolate_none_util。小时
  • ags/audio/ags_fm_synth_util。小时
  • ags/audio/ags_frequency_aliase_util。小时
  • ags/audio/ags_hq_pitch_util。小时
  • ags/audio/ags_lfo_synth_util。小时
  • ags/audio/ags_linear_interpolate_util。小时
  • ags/audio/ags_noise_util。小时
  • ags/audio/ags_peak_util。小时
  • ags/audio/ags_phase_shift_util。小时
  • ags/音频/ags_resample_util。小时
  • ags/audio/ags_sf2_synth_util。小时
  • ags/audio/ags_sfz_synth_util。小时
  • ags/audio/ags_synth_util。小时
  • ags/audio/ags_time_stritch_util(标签/音频/ags_teme_stritch实用程序)。小时
  • ags/音频/ags_volume_util。小时


音频缓冲区的常用字段有destination、destination_stride、source和source_stride,或者预置buffer_length、format和samplerate。结构的字段通常具有getter/setter函数。

统一格式字段以使用这些格式:

  • AGS_SOUNDCARD_SIGNED_8_BIT公司
  • AGS_SOUNDCARD_SIGNED_16_BIT公司
  • AGS_SOUNDCARD_SIGNED_24_BIT公司
  • AGS_SOUNDCARD_SIGNED_32_位
  • AGS_SOUNDCARD_SIGNED_64_BIT公司
  • AGS_SOUNDCARD_FLOAT公司
  • AGS_SOUNDCARD_DOUBLE公司
  • AGS_SOUNDCARD_COMPLEX公司


目标字段和源字段的格式通常完全相同。这些函数接受1个参数,即框类型结构作为指针。

https://savannah.nongu.org/news/?id=10091 GSequencer 4.0.x版发布 2022-02-26T09:47:43+00:00 若埃尔·克雷赫曼

几天前,我开始将libags_gui.so迁移到Gtk-4。实际上只有AgsPiano和AgsRuler可以迁移。该库删除了以下小部件:

  • AgsV指示器
  • AgsH指示器
  • AgsVLedArray阵列
  • AgsHLed阵列
  • AgsV刻度
  • AgsHScale公司
  • AgsVScaleBox公司
  • AgsHScaleBox(AgsHScaleBox)
  • AgsV级
  • AgsHLevel公司
  • AgsV液位箱
  • AgsH液位箱


为了取代这些小部件,以下小部件实现了GtkOrientable接口:

  • Ags指示器
  • AgsScale公司
  • AgsLevel公司


以下小部件继承自GtkBox,它也实现了GtkOrientable接口:

  • 阿格斯莱德阵列
  • AgsScale框
  • AgsLevelBox(AgsLevel框)


AgsPiano和AgsRuler可能也将实现GtkOrientable。

AgsViewport已被删除,因为它不再需要。我们可以将GtkScrolledWindow与GTK_POLICY_EXTERNAL策略一起使用。

迁移libgsequencer.so是一项艰巨的任务,我预计在使用新的Gtk主要版本之前,至少需要一个月的时间。




乔埃尔

https://savannah.nongu.org/news/?id=10048 GSequencer版本3.14.3发布 2021-12-21T20:14:10+00:00 乔·克雷赫曼

刚刚发布的高级Gtk+Sequencer 3.14.x版系列。该应用程序具有一种新的合成器仪器AgsHybridSynth。这种合成与以前的实现不同,因为它使用效果处理器来进行合成,而不是音频信号模板。

ags-fx-synth是一个继承ags-fx符号的效果处理器,有48个输入控制端口来调整合成的各个方面。它配有2个支持相位重置的振荡器,可由最多3个同步点控制。它们是相对于播放的频率应用的。因此,控制值的范围为0.0到2.0*M_PI。此外,同步点由LFO调制。

尚未实现的是噪声和定序器做按键调制。实现了低通和高通滤波器。高通和低通滤波器代码改编自fluidsynth。

ags-fx-synth使用AgsHQPitchUtil执行附加俯仰,效果处理器也使用AgsChorusUtil。

相位调制棒极了!




干杯,
乔埃尔

https://savannah.nongu.org/news/?id=10042 已弃用的AgsDevout、AgsDevin和AgsMidiin 2021-12-08T12:30:55+00:00 乔·克雷赫曼

从Advanced Gtk+Sequencer v3.13.2 AgsDevout开始,AgsDevin和AgsMidiin已被弃用。ALSA后端将替换为:

  • AgsAlsa虔诚
  • 阿格斯阿尔萨德文
  • AgsAlsaMidiin公司


以及他们的OSS对手:

  • AgsOss虔诚
  • AgsOssDevin公司
  • 阿格斯密码子


由于历史原因,ALSA和OSS后端由相同的对象处理。这将发生变化,代码已被重构,逻辑被ALSA和OSS的专用对象划分。

OSS的潜在死锁


开放式音响系统代码有一些潜在的死锁,这是刚刚修复的。

AgsMidiin中缺少授权


由于ags_midiin.c中的一个bug,OSS MIDI输入根本无法工作,这只是得到了修复。

实现了时间延伸功能


这个小版本刚刚增加了时间延展功能。它可以从波形编辑器中获得。

https://savannah.nongu.org/news/?id=10006 GSequencer版本3.10.5发布 2021-08-29T07:41:14+00:00 乔·克雷赫曼

现在,高级Gtk+Sequencer实现了一个VST3主机。因此,我必须为VST3实现一个C包装器库。它被称为libags-vst.so。不过,包装器还没有覆盖所有VST3类。VST3主机还不支持插件UI。

为了运行VST3 UI,我们必须实现IPC机制来与外部UI对话。Advanced Gtk+Sequencer实现了一个OSC服务器,可以完成这项工作。我们只需要扩展它。

VST3 C API


C包装器能够与VST3插件对话,但目前的方式非常有限。一些结构尚不支持alloc或具有任何getter/setter函数。有可能扩展它。

ags-fx-vst3召回


libags-audio.so仍然是一个C库,现在支持ags-fx-vst3回调。它确实运行由AgsVst3Manager和AgsVst3Plugin分析的VST3插件。

AgsVst3Bridge和AgsLiveVst3Bridge


这是在gsequencer中运行VST3插件的两台机器。




作者:Joöl

https://savannah.nongu.org/news/?id=10000 实现VST3 C API包装器 2021-08-10T12:53:03+00:00 乔·克雷赫曼

VST3是Steinberg的音频插件标准,在Microsoft Windows和Apple macOS上很常见。

2年前,我开始实现VST3 C API包装器,但从未完成。

一周前,我开始了这项工作。到目前为止,我已经创建了51个API头文件和48个.cpp文件。这些更改包括超过10’000行代码。


$find ags/vst3-capi/-name“*.cpp”-or-name“*.h”|xargs wc-l
总计10298


高级Gtk+Sequencer v3.10.x版本目标


3.10.x版本的主要目标是部分支持VST3 C API Wrapper。VST3包含500多个头文件,在一个版本中涵盖所有头文件是没有意义的。

此外,我想去掉不推荐使用的函数体,并使用新的替换函数。




作者:Joöl

https://savannah.nongu.org/news/?id=9997 重构的实用程序函数 2021-08-03T06:26:38+00:00 乔·克雷赫曼

许多实用程序函数已声明为不推荐使用。每个都有一个具有不同签名的替换函数。新函数只接受1个参数,即包含所有必需参数的结构。

此外,所有结构都至少有source和source_stride字段,如果需要,还有destination和destination_stride。

将参数作为结构传递有一些优点,例如能够预先设置内存,并且在处理实用程序函数时不再动态分配内存。如果一个实用程序函数需要另一个实用程序函数,这就很容易了。

不推荐使用的实用程序函数


这里是不推荐使用的函数的简短摘要




  • ags_fast_pitch_util_compute_s8()
  • ags_fast_pitch_util_compute_s16()
  • ags_fast_pitch_util_compute_s24()
  • ags_fast_pitch_util_compute_s32()
  • ags_fast_pitch_util_compute_s64()
  • ags_fast_pitch_util_compute_float()
  • ags_fast_pitch_util_compute_double()
  • ags_fast_pitch_util_compute_complex()





  • ags_hq_pitch_util_compute_s8()
  • ags_hq_pitch_util_compute_s16()
  • ags_hq_pitch_util_compute_s24()
  • ags_hq_pitch_util_compute_s32()
  • ags_hq_pitch_util_compute_s64()
  • ags_hq_pitch_util_compute_float()标签
  • ags_hq_pitch_util_compute_double()
  • ags_hq_pitch_util_compute_complex()





  • ags_linear_interporate_util_fill_s8()
  • ags_linear_interporate_util_fill_s16()
  • ags_linear_interpolate_util_fill_s24()标签
  • ags_linear_interporate_util_fill_s32()
  • ags_linear_interporate_util_fill_s64()
  • ags_linear_interporate_util_fill_float()
  • ags_linear_interporate_util_fill_double()
  • ags_linear_interporate_util_fill_complex()





  • ags_sf2_synth_util_copy_s8()
  • ags_sf2_synth_util_copy_s16()
  • ags_sf2_synth_util_copy_s24()
  • ags_sf2_synth_util_copy_s32()
  • ags_sf2_synth_util_copy_s64()
  • ags_sf2_synth_util_copy_float()
  • ags_sf2_synth_util_copy_double()
  • ags_sf2_synth_util_copy_complex()
  • ags_sf2_synth_util_copy()





  • ags_sfz_synth_util_copy_s8()
  • ags_sfz_synth_util_copy_s16()
  • ags_sfz_synth_util_copy_s24()
  • ags_sfz_synth_util_copy_s32()
  • ags_sfz_synth_util_copy_s64()
  • ags_sfz_synth_util_copy_float()
  • ags_sfz_synth_util_copy_double()
  • ags_sfz_synth_util_copy_complex()
  • ags_sfz_synth_util_copy()





  • ags_fluid_ir过滤器util_apply_s8()
  • ags_fluid_ir过滤器util_apply_s16()
  • ags_fluid_ir过滤器util_apply_s24()
  • ags_fluid_ir过滤器util_apply_s32()
  • ags_fluid_ir过滤器util_apply_s64()
  • ags_fluid_ir过滤器util_apply_float()
  • ags_fluid_ir过滤器util_apply_double()
  • ags_fluid_ir过滤器util_apply_complex()





  • ags_fluid_interpolate_none_util_fill_s8()
  • ags_fluid_interpolate_none_util_fill_s16()标签
  • ags_fluid_interpolate_none_util_fill_s24()
  • ags_fluid_interpolate_none_util_fill_s32()
  • ags_fluid_interpolate_none_util_fill_s64()
  • ags_fluid_interpolate_none_util_fill_float()
  • ags_fluid_interpolate_none_util_fill_double()标签
  • ags_fluid_interpolate_none_util_fill_complex()





  • ags_fluid_interpolate_linear_util_fill_s8()
  • ags_fluid_interpolate_linear_util_fill_s16()
  • ags_fluid_interpolate_linear_util_fill_s24()
  • ags_fluid_interpolate_linear_util_fill_s32()
  • ags_fluid_interpolate_linear_util_fill_s64()
  • ags_fluid_interpolate_linear_util_fill_float()
  • ags_fluid_interpolate_linear_util_fill_double()
  • ags_fluid_interpolate_linear_util_fill_complex()





  • ags_fluid_interpolate_4th_order_util_fill_s8()
  • ags_fluid_interpolate_4th_order_util_fill_s16()
  • ags_fluid_interpolate_4th_order_util_fill_s24()
  • ags_fluid_interpolate_4th_order_util_fill_s32()
  • ags_fluid_interpolate_4th_order_util_fill_s64()
  • ags_fluid_interpolate_4th_order_util_fill_float()
  • ags_fluid_interpolate_4th_order_util_fill_double()
  • ags_fluid_interpolate_4th_order_util_fill_complex()标签





  • ags_fluid_interpolate_7th_order_util_fill_s8()
  • ags_fluid_interpolate_7th_order_util_fill_s16()
  • ags_fluid_interpolate_7th_order_util_fill_s24()
  • ags_fluid_interpolate_7th_order_util_fill_s32()
  • ags_fluid_interpolate_7th_order_util_fill_s64()
  • ags_fluid_interpolate_7th_order_util_fill_float()
  • ags_fluid_interpolate_7th_order_util_fill_double()
  • ags_fluid_interpolate_7th_order_util_fill_complex()





  • ags_audio_buffer_util_volume_s8()
  • ags_audio_buffer_util_volume_s16()
  • ags_audio_buffer_util_volume_s24()
  • ags_audio_buffer_util_volume_s32()
  • ags_audio_buffer_util_volume_s64()
  • ags_audio_buffer_util_volume_float()
  • ags_audio_buffer_util_volume_double()
  • ags_audio_buffer_util_volume_complex()音频缓冲区
  • ags_audio_buffer_util_volume()





  • ags_audio_buffer_util_peak_s8()
  • ags_audio_buffer_util_peak_s16()
  • ags_audio_buffer_util_peak_s24()
  • ags_audio_buffer_util_peak_s32()
  • ags_audio_buffer_util_peak_s64()
  • ags_audio_buffer_util_peak_float()
  • ags_audio_buffer_util_peak_double()
  • ags_audio_buffer_util_peak_complex()
  • ags_audio_buffer_util_peak()





  • ags_audio_buffer_util_resample_s8()
  • ags_audio_buffer_util_resample_s16()
  • ags_audio_buffer_util_resample_s24()
  • ags_audio_buffer_util_resample_s32()
  • ags_audio_buffer_util_resample_s64()
  • ags_audio_buffer_util_resample_float()
  • ags_audio_buffer_util_resample_double()
  • ags_audio_buffer_util_resample_complex()
  • ags_audio_buffer_util_resample()





  • ags_audio_buffer_util_resample_s8_with_buffer()
  • ags_audio_buffer_util_resample_s16_with_buffer()
  • ags_audio_buffer_util_resample_s24_带缓冲区()
  • ags_audio_buffer_util_resample_s32_with_buffer()
  • ags_audio_buffer_util_resample_s64_with_buffer()
  • ags_audio_buffer_util_resample_float_with_buffer()
  • ags_audio_buffer_util_resample_double_with_buffer()
  • ags_audio_buffer_util_resample_complex_with_buffer()
  • ags_audio_buffer_util_resample_with_buffer()





作者:Joöl

https://savannah.nongu.org/news/?id=9980 GSequencer版本3.9.1发布 2021-06-30T06:07:07+00:00 乔·克雷赫曼

在GSequencer版本3.9.1中,我在实用程序函数头中引入了一些空结构,从中我创建了一个装箱类型。这样可以更好地匹配自省函数。

哎哟,GSequencer以前的版本没有这些类型。例如,导致ags_audio_buffer_util.h的符号在AgsAudio中结束。音频,什么都没有意义。

现在,我们有了AgsAudio。音频缓冲区Util.copy_buffer_to_buffer()

从UI中选择所需的俯仰功能


一些fluidsynth soundfont2文件示例使用“ags-hq-pitch”产生更好的结果,其他使用SFZ的示例使用“fluid-4th-order-interpolate”产生良好的结果。这些音高函数可以由AgsFFPlayer或带有GtkComboBox的AgsPitchSampler选择。




乔埃尔

https://savannah.nongu.org/news/?id=9905 迁移到Gtk4的准备 2021-02-18T10:38:40+00:00 乔·克雷赫曼

为了迁移到Gtk4,我开始修复不推荐使用的Gtk3符号。

然而,3.8.x分支包含许多更改。

重构编辑器区域


AgsCompositeEditor的引入,使我能够重新修改编辑器区域。也许我们可以修正gui-scale因子。

这个想法是让一个复合小部件能够包含任何现有的编辑器区域。这将允许在主窗口中实现自动化和波形编辑器。

修复不推荐的Gtk3符号


最常见的任务是使用GtkOrientable并删除以下子类型:

  • GtkBox公司
  • GtkScale公司
  • Gtk滚动条


或者用GtkGrid替换GtkTable。

解决问题的时机


通过GCC编译器输出,已经解决了许多问题,并实际解决了这些问题。重要的更改是直接在3.7.x分支上进行的。

迁移日期不确定


我们不确定何时真正迁移到Gtk4。。。




作者:Joöl

https://savannah.nongu.org/news/?id=9843 GSequencer中的延迟和攻击修正 2020-12-07 T15:54:04+00:00 乔·克雷赫曼

这种延迟和攻击与演奏音符的时间有关。延迟指定在播放下一个音符之前发生buffer_size的次数。在这种情况下,攻击意味着在什么帧位置插入注释。

需要纠正


AgsSoundcard实现的延迟和攻击大小是AGS_SOUNDCARD_DEFAULT_PERIOD的2倍。但目前只使用了第一个句号。

假设您有一个具有以下节奏和预设的项目:


制动压力=136
段=1/16*4

采样率=44100
缓冲区大小=1024


这将为您提供以下绝对延迟:


绝对延迟=60.0*((采样/缓冲大小)/bpm)*段=4.749971278


这将导致可变攻击,具体取决于所玩的偏移量。这不是GSequencer中的工作方式。

修正的延迟


延迟的纠正方式是定期进行攻击。这意味着在AGS_SOUNDCARD_DEFAULT_PERIOD时间延迟后,我们可以获得:


攻击=0


攻击背后的魔法在ags_soundcard_util中计算。c(c)

http://git.savannah.nongnu.org/cgit/gsequencer.git/tree/ags/audio/ags_soundcard_util.c

因此,我们计算AGS_SOUNDCARD_DEFAULT_PERIOD之后的剩余帧,并使用total_correct_frame_count调整绝对延迟。


default_tact_frames=绝对延迟*缓冲区大小;

total_correct_frame_count=((guint)AGS_SOUNDCARD_DEFAULT_PERIOD*DEFAULT_tact_frames)%buffer_size;

correct_frame_count=(gdouble)total_correct_frames_count/AGS_SOUNDCARD_DEFAULT_PERIOD;

corrected_delay=绝对延迟+(correct_frame_count/buffer_size);


因此,我们的延迟从4.749971278变为4.750918277。差异为0.000946999,导致不准确度约为段持续时间的千分之一。

在这里,我们在一秒钟内有8个播放键。这段0.125秒的持续时间除以1000可以得出时间上的误差。




作者:Joöl