【问题标题】:Sound Not Playing in iOSiOS 无法播放声音
【发布时间】:2013-03-10 15:55:53
【问题描述】:

我正在制作一个小型 iOS 游戏,并且已经完成了一切,除了声音。我检查了文件格式,尝试了 .wav 和 .aiff ,但它们都不起作用。相关代码如下:

.h文件:

#import <AudioToolbox/AudioToolbox.h>

@public SystemSoundID mBeep;
NSString* path;
NSURL* url;

.m文件:

path = [[NSBundle mainBundle]pathForResource:@"hit" ofType:@"wav"];
url = [NSURL URLWithString:path];
AudioServicesCreateSystemSoundID((CFURLRef)url, &mBeep);

AudioServicesPlaySystemSound(mBeep); //Gets called, doesn't play

如果我使用其中一个未记录的 ID,例如 1103AudioServicesPlaySystemSound,则声音播放正常。

我很确定我的文件没问题,因为同一个 .wav 文件在 Android、VLC、iTunes 等设备上都能完美运行。

有谁知道我做错了什么?

【问题讨论】:

    标签: ios audio


    【解决方案1】:

    最可能的罪魁祸首是 WAV 上的编码。如this answer 所示,iOS 仅支持某些编解码器,而您尝试播放的 WAV 可能使用了不受支持的编解码器。

    就像那个答案所说,最简单的解决方案是使用命令行afconvert 工具(无损)将您的 WAV 转换为 Apple 的默认 CAF 格式并改用它:

    afconvert sound1.wav sound1.caf
    

    另一种可能性——也是 OP 的实际问题——是文件不存在和/或pathForResource 没有成功找到它,这将由path 表示为nil

    【讨论】:

    • 我试过了。您给出的命令不起作用,但通过谷歌搜索,转换发生在“afconvert -f caff -d aac -c 1 /Users/raghavsood/Desktop/iOS/Shared/Resources/hit.wav /Users/ raghavsood/Desktop/iOS/Shared/Resources/hit.caf" 即使在此之后声音也不会播放。我也尝试使用 aiff 格式。您还有其他想法吗?
    • 你能检查你是否成功读取了文件?尝试对文件执行其他操作,例如将其加载到 NSData。
    • 我使用以下命令从文件中读取数据: NSData *fileData = [NSData dataWithContentsOfFile:path]; if(fileData!=NULL) { NSLog(@"文件读取");日志语句没有出现,所以我猜该文件没有被读取。我试过改变资源路径。该文件存储在 /Shared/Resources 中。我尝试过使用相对路径、备用路径以及我在此过程中发明的任何其他路径。他们都没有工作。您还有其他想法吗?
    • 文件在哪个物理文件夹中并不重要,只要它实际上是你的Xcode目录。你可能想看看questions about pathForResource。该方法可能失败,pathnil
    • 你是对的。除了格式之外,路径也是问题。出于某种原因,大约在项目进行到一半时,xcode 停止打包我的“声音”子文件夹。我把它加回去了,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多