2016-06-30 7 views
0

Ich habe eine WAV-Datei, die im Browser fein spielt:Wird WAV-Datei auf iOS unterstützt?

https://d5e5ca34-f670-4a7f-98c7-1643d83ecc1d:[email protected]/text-to-speech/api/v1/synthesize?accept=audio/wav&voice=en-US_MichaelVoice&text=Hello%20world

Es ist jedoch nicht auf meinem Simulator zu spielen. Gibt es Einschränkungen bei der Unterstützung von WAV-Dateien in iOS?

NSString *urlString = @"https://d5e5ca34-f670-4a7f-98c7-1643d83ecc1d:[email protected]/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]; 
+1

wav ein Behälter ist. Es kann Audio in jedem Format enthalten, für das in Windows ein Codec existiert. Daher wird möglicherweise das WAV-Dateiformat unterstützt, das tatsächliche Audio innerhalb möglicherweise nicht. –

+0

@SamB, ich habe versucht, die Datei zu meinem Projekt hinzuzufügen - aber es spielt auch nicht so. Es wird jedoch kein Fehler angezeigt. – etayluz

Antwort

0

WAV wird unterstützt. Bitte lesen Sie hier Antworten auf ähnliche Frage: Supported Audio file formats in iPhone

In Bezug auf den Code, würde ich verwenden NSData Methoden nicht die Datei zu laden und stattdessen etwas mehr klar wie in dieser Antwort gezeigt verwenden: https://stackoverflow.com/a/14424418/883738

Punkt ist, dass

Es wird nicht empfohlen, DataWithContentsOfURL zu verwenden: da es synchron ist und Ihre App blockieren wird funktioniert; Wenn der Server nicht antwortet könnte es Ihre App für eine ziemlich lange Zeit blockieren.

Hoffe das hilft.

Update: Ausführen von Code in Beispiel iOS-Projekt spielt keinen Ton, so bleibt die Frage ungelöst.

BTW, wenn Sie Sprachsynthesizer verwenden möchten, können Sie iOS integrierte in

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

AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init]; 
[synthesizer speakUtterance:utterance]; 
+0

Danke, können Sie bitte versuchen, den Code auszuführen und zu sehen, ob es für Sie funktioniert? Ich denke immer noch, dass etwas mit der WAV-Datei nicht stimmt. Ich bin nicht besorgt darüber, wie die Datei im Moment heruntergeladen wird. – etayluz

+0

Es funktioniert nicht und ich sehe folgende Fehler im Protokoll: 2016-06-30 12: 30: 21.322 so [61431: 4778248] CFNetwork SSLHandshake fehlgeschlagen (-9824) 2016-06-30 12:30: 21,323 so [61431: 4778248] NSURLSession/NSURLConnection HTTP-Laden fehlgeschlagen (kCFStreamErrorDomainSSL, -9824) –

+0

Hinzufügen von ATS-Sicherheitsausnahme, um beliebige Lasten noch zu ermöglichen, hilft nicht –

1

verwenden Es ist etwas falsch mit Ihrem WAV-Audio-Datei ist. Es ist nicht kompatibel mit Apple-Codecs. Ich habe eine andere Online-WAV-Datei ausprobiert und es hat funktioniert. Hier ist mein Arbeitscode. Stellen Sie sicher, "App Transport Security Settings" in Ihrer Datei info.plist In *

hinzufügen .h

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

@interface v1MyCustomAudioPlay : UIViewController <AVAudioPlayerDelegate> 

@property (nonatomic, retain) AVAudioPlayer *myAudioPlayer1; 

In * .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"); 
} 
+0

wundert sich, warum der audioPlayerDecodeErrorDidOccur nicht für die bereitgestellte WAV-Datei aufgerufen wird. –

Verwandte Themen