codecamp

创建audio_driver(音频驱动)

合成器本身不会将音频流发送到音频设备,这允许应用程序开发人员根据需要自行管理音频输出。下一节将更详细地介绍如何配置不使用音频驱动程序的合成器。

创建音频驱动程序非常简单:在 settings 里配置好,并创建驱动程序对象。由于 FluidSynth 支持多个音频驱动系统,因此您可能需要自行指定其中一个。下面的列表显示了我们当前支持的音频系统。它显示 FluidSynth 库使用的名称和说明。(属性名为audio.driver,可取值为以下字符串)

  • jack: JACK Audio Connection Kit (Linux, Mac OS X, Windows)
  • alsa: Advanced Linux Sound Architecture (Linux)
  • oss: Open Sound System (primarily needed on BSD, rarely also Linux and Unix in general)
  • pulseaudio: PulseAudio (Linux, Mac OS X, Windows)
  • coreaudio: Apple CoreAudio (Mac OS X)
  • dsound: Microsoft DirectSound (Windows)
  • portaudio: PortAudio Library (Mac OS 9 & X, Windows, Linux)
  • sndman: Apple SoundManager (Mac OS Classic)
  • dart: DART sound driver (OS/2)
  • opensles: OpenSL ES (Android)
  • oboe: Oboe (Android)
  • waveout: Microsoft WaveOut, 等价于 DirectSound (Windows CE x86, Windows Mobile 2003 for ARMv5, Windows 98 SE, Windows NT 4.0, Windows XP 及以后)
  • file: 将音频输出到文件,而不是具体的设备
  • sdl2: Simple DirectMedia Layer (Linux, Windows, Mac OS X, iOS, Android, FreeBSD, Haiku, etc.)。
  • pipewire*: PipeWire (Linux)

提示:为了调用 SDL2 或 PipeWire,您的应用程序必须首先初始化它们(SDL2 的 SDL_Init 函数 或 Pipewire 的 pw_init)。这个任务必须在调用 new_fluid_settings() 之前就完成!!另外还要在所有 FluidSynth 对象都析构后调用一次“退出”函数(SDL2 的 SDL_Quit 或 PipeWire 的 pw_deinit)!

以上可取值由您操作系统的支持情况、是否将第三方库编译进去而决定,但是也可以通过 fluid_settings_getstr_default() 函数获取默认设备句柄。 若要获取一个可用的驱动程序列表,请使用 fluid_settings_foreach_option() 函数。 最后,请使用 fluid_settings_setstr() 配置驱动。在大多数情况下,默认的驱动可以直接使用,不需要配置。

控制音频质量与延迟的 settings 包括 audio.sample-formataudio.period-size 以及 audio.periods。将会在后续的章节详细讨论。

您可以使用 new_fluid_audio_driver() 函数创建一个新的 audio_driver 对象,它需要将 settings 和 synth 对象作为参数传入。

我们看一下范例:

void init() 
{
    fluid_settings_t* settings;
    fluid_synth_t* synth;
    fluid_audio_driver_t* adriver;
    settings = new_fluid_settings();
    /* Set the synthesizer settings, if necessary */
    synth = new_fluid_synth(settings);
    fluid_settings_setstr(settings, "audio.driver", "dsound"); //此处仅供参考,请以实际系统环境为准
    adriver = new_fluid_audio_driver(settings, synth);
}

这只是我们自己定义的一个函数。

当音频驱动对象被创建后,它会立即运行,并创建一个单独的线程(依赖 OpenMP 或 Pthread)来处理音频输出。

我们提供许多常规音频驱动程序设置。audio.driver 定义了我们指定的驱动程序缩写(字符串。见上文)。settings_audio_periods 和 settings_audio_period-size settings 定义了音频延迟。另有一些其他的音频驱动系统设置,请访问[链接]()以获取更多信息。

温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

C语言API

Fluid Settings

无标题目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }