在 iOS 中立即开始播放简短的自制声音
Posted
技术标签:
【中文标题】在 iOS 中立即开始播放简短的自制声音【英文标题】:Playing short selfmade sound with immediate start in iOS 【发布时间】:2011-09-27 18:25:43 【问题描述】:我有一个由程序生成的自行生成的 DTMF 声音(带有 wav 标题),我希望能够快速播放,事实上只要用户触摸一个按钮。这个 DTMF 声音必须无限播放/循环,直到我停止它。必须能够同时播放其他一些声音。
我是音频编程的新手,我测试了很多方法,现在我迷路了。
我怎样才能做到这一点?
需求:
播放开始非常快(包括第一次) 同时发出多种声音(短音 +- 2-6 秒) 无限 DTMF 声音,无间隙 控制正在播放的不同声音/能够只停止一种播放的声音【问题讨论】:
【参考方案1】:AVAudioPlayer
如果您可以忍受一些延迟,OpenAL(例如Finch)如果您确实需要尽可能低的延迟。
【讨论】:
其实你可以通过提前排队track来摆脱这种延迟。这样,当你玩它时,你会得到一个热启动。 有多热?上次我测量它总是至少 20 毫秒左右,这对于许多目的来说太慢了。但是我已经很久没有尝试过了,所以也许情况会好转。 没错。 OpenAL 表现更好。当声音与一些时间敏感的输入(如敲击)绑定时,很容易发现差异。【参考方案2】:我使用已经存在的 .wav 文件。我可以轻松地玩它。
用于运行以下代码。包括 AudioToolbox 框架。
写入.h文件#import <AudioToolbox/AudioToolbox.h>
写入.m文件
-(IBAction)startSound
//Get the filename of the sound file:
NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/sound1.wav"];
//declare a system sound
SystemSoundID soundID;
//Get a URL for the sound file
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
//Use audio sevices to create the sound
AudioservicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
//Use audio services to play the sound
[self sound];
timer =[ [NSTimer scheduledTimerWithTimeInterval:2.1 target:self selector:@selector(sound) userInfo:nil repeats:YES]retain];
【讨论】:
我认为系统声音服务不适合这个。延迟如何?您可以循环播放声音而不跳过吗?你能停止个别声音吗?以上是关于在 iOS 中立即开始播放简短的自制声音的主要内容,如果未能解决你的问题,请参考以下文章