简体   繁体   中英

AVAudioPlayer not playing sound IOS

Good Morning,

I have the following iphone app that converts a string to audio using googleTTS, and am stuck on actually playing the downloaded data. Can someone please help me figure out why I cannot hear anything.

viewcontroller.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "RJGoogleTTS.h"


@interface ViewController : UIViewController <CLLocationManagerDelegate>

@property (weak, nonatomic) IBOutlet UILabel *userLabel;
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLGeocoder *geoCoder;

@property (strong, nonatomic) RJGoogleTTS *googleTTS;

- (IBAction)geoCodeLocation:(id)sender;

- (IBAction)rjGoogleButton:(id)sender;
@end

viewcontroller.m

- (IBAction)rjGoogleButton:(id)sender {

    googleTTS = [[RJGoogleTTS alloc]init];

    [googleTTS convertTextToSpeech:@"How are you today user?"];

}

rjgoogletts.h

#import <Foundation/Foundation.h>

@protocol RJGoogleTTSDelegate <NSObject>

@required
- (void)receivedAudio:(NSMutableData *)data;
- (void)sentAudioRequest;

@end

@interface RJGoogleTTS : NSObject {
    id <RJGoogleTTSDelegate> delegate;
    NSMutableData *downloadedData;
}

@property (nonatomic, retain) id <RJGoogleTTSDelegate> delegate;
@property (nonatomic, retain) NSMutableData *downloadedData;

- (void)convertTextToSpeech:(NSString *)searchString;

@end

rjgoogletts.m

#import "RJGoogleTTS.h"
#import <AVFoundation/AVFoundation.h>

@implementation RJGoogleTTS
@synthesize delegate, downloadedData;

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)convertTextToSpeech:(NSString *)searchString {

    //NSString *search = [NSString stringWithFormat:@"http://translate.google.com/translate_tts?q=%@", searchString];
    NSString *search = [NSString stringWithFormat:@"http://translate.google.com/translate_tts?tl=en&q=%@", searchString];

    search = [search stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
    NSLog(@"Search: %@", search);
    self.downloadedData = [[NSMutableData alloc] initWithLength:0];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:search]];
    [request setValue:@"Mozilla/5.0" forHTTPHeaderField:@"User-Agent"];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
    //[delegate sentAudioRequest];




}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"did you receive response user");
    [self.downloadedData setLength:0];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"did you receive data user");
    [self.downloadedData appendData:data];



}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Failure");
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSLog(@"it worked user!!!");
    [delegate receivedAudio:self.downloadedData];
    NSLog(@"here are the bytes downloaded, %d", [self.downloadedData length]);


    NSString *txt = [[NSString alloc] initWithData:downloadedData encoding: NSASCIIStringEncoding];
    NSLog(@"%@hello",txt);

    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]initWithData:self.downloadedData error:nil];
    [audioPlayer prepareToPlay];
    [audioPlayer play];

}

@end

Are you using ARC? If so, you will need to retain the audio so it doesn't automatically set to nil, add the following property into the header file of rjgoogletts and voila! @property (nonatomic, strong) AVAudioPlayer *audioPlayer; Hope this helps. Jim

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM