1

我正在尝试将本地 mp3 文件的路径发送到 javascript,并从那里创建一个填充有源的音频标签。但是,当我尝试此操作时,会出现“无法播放音频文件”消息。文件本身来自应用程序特定的沙箱,因此路径看起来像这样

/Users/username/Library/Application Support/iPhone Simulator/6.0/Applications/818263D7-4246-4DEC-9186-6AC14F0175A3/Documents/audiofile.mp3

问题是我可以使用相同的方法从桌面播放 mp3,而不是存储在应用程序本身的沙盒或本地文件系统中的 mp3。这是我用来获取路径并通过 webview 将其发送到 javascript 的代码。任何帮助将不胜感激。

UIWebView *webContainer = [[UIWebView alloc] initWithFrame: self.view.bounds];
webContainer.backgroundColor = [UIColor grayColor];
webContainer.autoresizingMask = ( UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight );
[webContainer setBackgroundColor:[UIColor clearColor]];
webContainer.delegate = self;
[self.view addSubview:webContainer];

NSString *imagePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,         NSUserDomainMask, YES) objectAtIndex:0];

NSString *imPath = [NSString stringWithFormat:@"%@/angels.mp3",imagePath];
imPath = [imPath stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

[webContainer stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setupAudio('%@');", imPath]];
4

2 回答 2

1

如果您的路径以“audiofile.mp3”结尾,我认为文件“angels.mp3”不会播放。

但是您可以只使用MPMoviePlayerController来播放文件:

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,             NSUserDomainMask, YES) objectAtIndex:0];

NSString *audioPath = [NSString stringWithFormat:@"%@/angels.mp3",docPath];

MPMoviePlayerController* moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: audioPath];

[moviePlayer.view  setFrame:self.view.bounds]; 

//add it to your view
[viewController.view addSubview:moviePlayer.view];

//if you don't want any controls
[moviePlayer setControlStyle:MPMovieControlStyleNone];

//play!
[moviePlayer prepareToPlay];

来自一些示例的修改源。

可以在此处找到有关此主题的其他一些方便的相关问题。

于 2012-11-19T23:01:10.167 回答
1

如果您必须使用 a UIWebView,并且只想使用音频文件,则可以使用 URL 请求直接加载它(当然,请确保该文件存在于该 URL 处!)。

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *audioPath = [NSString stringWithFormat:@"%@/angels.mp3",docPath];

NSURL *url = [NSURL fileURLWithPath:audioPath isDirectory:NO];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

[webContainer loadRequest:request];
于 2012-11-19T23:10:11.763 回答