我正在使用 Xcode 中的 Cocoa 开发 Mac OS X 应用程序。一项功能涉及同时播放音频:
我想构建某种音频堆栈:在运行时从一组不同的源文件合并的音频文件。源音频文件集在每个运行时都不同。每个音频文件的长度完全相同。
创建音频堆栈(或合并文件)后,我想播放[和存储]它。
我是 Cocoa 中音频框架的新手。是否有提供适当功能的高级 API?我是否必须查看 CoreAudio、Audio Unit 或 QTKit 框架的内部?您有实现想法(或示例实现)吗?
我正在使用 Xcode 中的 Cocoa 开发 Mac OS X 应用程序。一项功能涉及同时播放音频:
我想构建某种音频堆栈:在运行时从一组不同的源文件合并的音频文件。源音频文件集在每个运行时都不同。每个音频文件的长度完全相同。
创建音频堆栈(或合并文件)后,我想播放[和存储]它。
我是 Cocoa 中音频框架的新手。是否有提供适当功能的高级 API?我是否必须查看 CoreAudio、Audio Unit 或 QTKit 框架的内部?您有实现想法(或示例实现)吗?
如果您只想同时播放一堆音频文件,这很容易;与 Windows 不同的是,OS X 就像它内置了一个无限通道混音器一样,所有更高级别的功能只是在需要时为每个声音抓取一个新通道。例如:
NSURL *u1 = [[NSBundle mainBundle] URLForResource:@"1" withExtension:@"mp3"];
NSURL *u2 = [[NSBundle mainBundle] URLForResource:@"2" withExtension:@"mp3"];
NSSound *s1 = [[NSSound alloc] initWithContentsOfURL:u1 byReference:YES];
NSSound *s2 = [[NSSound alloc] initWithContentsOfURL:u2 byReference:YES];
[s1 play];
[s2 play];
这将在(非常接近)同时开始播放 MyApp.app/Contents/Resources/1.mp3 和 MyApp.app/Contents/Resources/2.mp3。
如果你需要一个包含一堆音轨的(真实的或虚拟的)文件,QTKit 可能是最简单的方法;创建电影,打开所有音频文件,将它们的曲目复制到电影中(具有相同的开始日期),现在您可以播放电影(或做任何您想做的事情)。
如果您想将音频实际合并到一个立体声轨道中(例如,这样您可以保存一个普通的音频文件),而不是仅仅在运行时一起播放轨道,您可以使用上面的 QTKit 并创建一个导出会话(很像使用QuickTime Player 中的“导出...”功能),或者使用 CoreAudio,或者各种不同的跨平台开源库。