【问题标题】:Playing short selfmade sound with immediate start in iOS在 iOS 中立即开始播放简短的自制声音
【发布时间】:2011-09-27 18:25:43
【问题描述】:

我有一个由程序生成的自行生成的 DTMF 声音(带有 wav 标题),我希望能够快速播放,事实上只要用户触摸一个按钮。这个 DTMF 声音必须无限播放/循环,直到我停止它。必须能够同时播放其他一些声音。

我是音频编程的新手,我测试了很多方法,现在我迷路了。

我怎样才能做到这一点?

需求:

  • 播放开始非常快(包括第一次)
  • 同时发出多种声音(短音 +- 2-6 秒)
  • 无限 DTMF 声音,无间隙
  • 控制正在播放的不同声音/能够只停止一种播放的声音

【问题讨论】:

    标签: ios audio avaudioplayer core-audio playback


    【解决方案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];
    
    }
    

    【讨论】:

    • 我认为系统声音服务不适合这个。延迟如何?您可以循环播放声音而不跳过吗?你能停止个别声音吗?
    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2014-09-05
    • 1970-01-01
    相关资源
    最近更新 更多