WAV-файл поддерживается на iOS?

У меня есть файл WAV, который хорошо играет в браузере:

https://d5e5ca34-f670-4a7f-98c7-1643d83ecc1d:N8UAQQPXw10Z@stream.watsonplatform.net/text-to-speech/api/v1/synthesize?accept=audio/wav&voice=en-US_MichaelVoice&text=Hello%20world

Тем не менее, он не играет на моем симуляторе. Есть ли какие-то ограничения на поддержку файлов wav в iOS?

  NSString *urlString = @"https://d5e5ca34-f670-4a7f-98c7-1643d83ecc1d:N8UAQQPXw10Z@stream.watsonplatform.net/text-to-speech/api/v1/synthesize?accept=audio/wav&voice=en-US_MichaelVoice&text=Hello%20world";
  NSURL *url = [NSURL URLWithString:urlString];
  NSData *audioData=[NSData dataWithContentsOfURL:url];

  NSError *error;
  self.player = [[AVAudioPlayer alloc] initWithData:audioData error:&error];
  [self.player setVolume:1.0];
  [self.player setDelegate:self];
  [self.player setNumberOfLoops:0];
  [self.player prepareToPlay];
  [self.player play];

2 ответа

Что-то не так с вашим аудио-файлом wav. Это не совместимо с кодеками Apple. Я попробовал другой онлайн файл WAV, и это сработало. Вот мой рабочий код. Обязательно добавьте "Настройки безопасности транспорта транспорта" в файл info.plist.

В *.h

#import <UIKit/UIKit.h>
#include <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVAudioPlayer.h>

@interface v1MyCustomAudioPlay : UIViewController <AVAudioPlayerDelegate>

@property (nonatomic, retain) AVAudioPlayer *myAudioPlayer1;

В *.m

@implementation v1MyCustomAudioPlay

@synthesize myAudioPlayer1;

-(IBAction)playAudio
{
    NSLog(@"playAudio ...");

    NSString *urlString = @"http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/Samples/AFsp/M1F1-Alaw-AFsp.wav";
    NSURL *fileURL = [NSURL URLWithString:urlString];

    NSData *soundData = [NSData dataWithContentsOfURL:fileURL];
    myAudioPlayer1 = [[AVAudioPlayer alloc] initWithData:soundData  error:NULL];
    myAudioPlayer1.delegate = self;
    [myAudioPlayer1 play];

}

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    [myAudioPlayer1 stop];
    NSLog(@"Finished Playing");
}

- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
    NSLog(@"Error occurred");
}

WAV поддерживается. Пожалуйста, прочитайте ответы здесь в аналогичном вопросе: Поддерживаемые форматы аудио файлов в iPhone

Что касается вашего кода, я бы не стал использовать методы NSData для загрузки файла, а вместо этого использовал бы что-то более понятное, как показано в этом ответе: /questions/28583075/datawithcontentsofurl-ne-poluchaet-dannyie/28583087#28583087

Дело в том, что

Не рекомендуется использовать dataWithContentsOfURL: так как он синхронный и будет блокировать работу вашего приложения; если сервер не отвечает, он может заблокировать ваше приложение на долгое время.

Надеюсь это поможет.

Обновление: выполнение кода в примере проекта iOS не воспроизводит звук, поэтому вопрос остается нерешенным.

Кстати, если вы хотите использовать синтезатор речи, вы можете использовать встроенный iOS

NSString *string = @"Hello, World!";
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:string];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];

AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
[synthesizer speakUtterance:utterance];
Другие вопросы по тегам