ios:在模拟器中播放系统声音,但在 iphone 上没有

Posted

技术标签:

【中文标题】ios:在模拟器中播放系统声音,但在 iphone 上没有【英文标题】:ios: system sound played in the simulator but not on the iphone 【发布时间】:2011-08-05 22:50:54 【问题描述】:

我有以下代码:

 soundFilenames = [[NSArray alloc] initWithObjects:@"Alarm Clock Bell.caf", @"Bark.caf", @"Cartoon Boing.caf", @"Chimpanzee Calls.caf", @"School Bell Ringing.caf", @"Sheep Bah.caf", @"Squeeze Toy.caf", @"Tape Rewinding.caf", nil];

...

-(void)playSound 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int index = rand() % [soundFilenames count];
    NSString* filePath = [ [self getBasePath] stringByAppendingPathComponent:     [soundFilenames objectAtIndex:index] ];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    if( [fileManager fileExistsAtPath:filePath] )
        NSLog(@"File %@ exists", [soundFilenames objectAtIndex:index]);
    else
        NSLog(@"File %@ NOT exists", [soundFilenames objectAtIndex:index]);

    CFURLRef url = CFURLCreateWithFileSystemPath ( 0, (CFStringRef) filePath, kCFURLPOSIXPathStyle, NO );
    SystemSoundID outSystemSoundID;
    AudioservicesCreateSystemSoundID( url, &outSystemSoundID );
    AudioServicesPlaySystemSound( outSystemSoundID );
    [pool drain];

模拟器和iphone中的输出是这样的:

2011-08-06 00:46:45.323 Alarm[199:5f03] File Cartoon Boing.caf exists

该代码的问题:当我在模拟器中运行它时,一切正常,正在播放声音,但是当我在我的 iPhone 上运行它时,没有声音播放? (playsound 方法不是从主线程中调用的,因此是分离的自动释放池)

【问题讨论】:

【参考方案1】:

要在您的设备中播放短时声音文件,请尝试使用 aif 或 aiff(音频交换文件格式,即未压缩的脉冲编码调制 (PCM))格式的声音文件,而不是 caf(核心音频格式)格式的文件。

您可以使用任何转换软件将 caf 转换为 aiff。网上有很多可用的。我试过的一种是 Bigasoft Audio Converter 的试用版。

在您的设备上尝试后,请告诉我结果。万事如意。

【讨论】:

以上是关于ios:在模拟器中播放系统声音,但在 iphone 上没有的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayer 声音在模拟器和 ipad 设备中工作,但在 iPhone 设备中不工作

在不同 iOS 设备上同步声音的问题

声音在带断点的 iphone 模拟器中播放,但没有断点无法播放

新版本的 Xcode 破坏了音频播放代码

播放声音的 iOS 8 自定义键盘

iOS 应用仅通过耳机播放声音