iOS, WAV аудио не воспроизводится

Я пытаюсь получить в приложении функцию выбора идентификаторов файлов WAV, который загружает & играет с использованием NSURLRequest/Connect & AVAudioPlayer,

Я продолжаю сталкиваться OSStatus error 1954115647 (Операция не может быть завершена. (Тип файла, очевидно, не поддерживается)).

Подробности файла PCM S16 LE - Mono - 8000Hz - 16 bit/sample
Для дальнейшего изучения я попытался прочитать аудио прямо из потока, где он размещен, с помощью сафари iPhone. К сожалению, кажется, что браузер также не может воспроизвести файл (прекрасно работает в MAC-сафари, а также в других браузерах).

PHP для размещения потока выглядит следующим образом:

    $filename = "audio.wav";

header('Content-type: audio/x-wav');
header('Content-length: ' . strlen($file));
header('Content-disposition: inline; filename="' . $filename);
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
echo $file;

Я удивлен, что это проблема общего использования WAV-файла, как этот. Я ищу альтернативный формат & конвертировать / деконвертировать, чтобы заставить это работать, или есть большая вероятность ошибки где-то еще?

Я читаю Вот что iPhone не поддерживает определенные кодировки, однако это было опубликовано в 2007 году.

1

Решение

Общее решение (запрос к размещенному файлу):

@interface audioPlayer()<AVAudioPlayerDelegate, AVAudioPlayerDataSource>{
@property AVAudioPlayer *player;
}

...
-(void) playFile{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager setCredential:[NSURLCredential credentialWithUser:@"USER" password:@"PASSWORD" persistence:NSURLCredentialPersistenceNone]];
[manager GET:@"http://example.com/audio.wav" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Download Complete!");
NSData *data = responseObject;

NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"audio.wav"];

NSError *error;
[data writeToFile:filePath options:NSDataWritingAtomic error:&error];
NSLog(@"file error - %@", error); //should be (null)

NSURL *path = [NSURL fileURLWithPath:filePath];

/*
CFURLRef sysSound;
SystemSoundID soundID;
sysSound = (__bridge CFURLRef)path;

AudioServicesCreateSystemSoundID(sysSound, &soundID);
AudioServicesPlaySystemSound(soundID);
*/

NSError *playError;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:path fileTypeHint:@"wav" error:&playError];
NSLog(@"play error - %@", playError);

[player setDelegate:self];
[player setVolume:1.0];

BOOL prepareCheck = [player prepareToPlay];
NSLog(@"prepare - %hhd", prepareCheck);
BOOL playCheck = [player play];
NSLog(@"play - %hhd", playCheck);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}

Внимание: это не работает на симуляторе iOS

Вы заметите CFURLRef & SystemSoundID строки закомментированы. Изначально мне удалось воспроизвести аудиофайл, однако функции звукового сопровождения системы были ограничены (менее 30 секунд, только звук типа PCM).

Это нормально, если вы используете аудио в рамках этих ограничений, но мне потребовалось около минуты аудио. AVAudioPlayer решил это. Смотрите код для легкой реализации, но, пожалуйста, имейте в виду, что указание на AVAudioPlayer Локальная функция не будет работать. Плеер должен быть глобальным для файла реализации (см. @property под @interface)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]