在 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 中立即开始播放简短的自制声音的主要内容,如果未能解决你的问题,请参考以下文章

Android自制静音App,解决他人手机外放问题

python自制一款炫酷音乐播放器,想听啥随便搜!

在 iOS 应用中播放多种声音(mp3、wav 等)

仿照网易云音乐项目(自制音乐网页播放器)

自制jQuery

Zeloof 自制芯片工艺