Reply To: SaveThatWave not working

Home Forums OpenEars plugins SaveThatWave not working Reply To: SaveThatWave not working


I’m sorry but it’s still not working. I’ve followed the tutorial which before I wasn’t adding the linker flags but now I am, both the target and project.

I hate to dump code but this is my .m file. I can’t find anything wrong?

//  ViewController.m
//  OpenEarsTest

#import "ViewController.h"
#import <OpenEars/OELanguageModelGenerator.h>
#import <OpenEars/OEAcousticModel.h>
#import <OpenEars/OEPocketsphinxController.h>
#import <OpenEars/OEAcousticModel.h>
#import <OpenEars/OEEventsObserver.h>
#import <SaveThatWaveDemo/OEEventsObserver+SaveThatWave.h>
#import <SaveThatWaveDemo/SaveThatWaveController.h>

@interface ViewController () <OEEventsObserverDelegate>

@property AVAudioPlayer *musicPlayer;
@property NSString *audioFilePath;

@property (strong, nonatomic) OEEventsObserver *openEarsEventsObserver;
@property (strong, nonatomic) SaveThatWaveController *saveThatWaveController;


@implementation ViewController
@synthesize saveThatWaveController;

- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID {
    NSLog(@"The received hypothesis is %@ with a score of %@ and an ID of %@", hypothesis, recognitionScore, utteranceID);

- (void) pocketsphinxDidStartListening {
    NSLog(@"Pocketsphinx is now listening.");

- (void) pocketsphinxDidDetectSpeech {
    NSLog(@"Pocketsphinx has detected speech.");

- (void) pocketsphinxDidDetectFinishedSpeech {
    NSLog(@"Pocketsphinx has detected a period of silence, concluding an utterance.");

- (void) pocketsphinxDidStopListening {
    NSLog(@"Pocketsphinx has stopped listening.");

- (void) pocketsphinxDidSuspendRecognition {
    NSLog(@"Pocketsphinx has suspended recognition.");

- (void) pocketsphinxDidResumeRecognition {
    NSLog(@"Pocketsphinx has resumed recognition.");

- (void) pocketsphinxDidChangeLanguageModelToFile:(NSString *)newLanguageModelPathAsString andDictionary:(NSString *)newDictionaryPathAsString {
    NSLog(@"Pocketsphinx is now using the following language model: \n%@ and the following dictionary: %@",newLanguageModelPathAsString,newDictionaryPathAsString);

- (void) pocketSphinxContinuousSetupDidFailWithReason:(NSString *)reasonForFailure {
    NSLog(@"Listening setup wasn't successful and returned the failure reason: %@", reasonForFailure);

- (void) pocketSphinxContinuousTeardownDidFailWithReason:(NSString *)reasonForFailure {
    NSLog(@"Listening teardown wasn't successful and returned the failure reason: %@", reasonForFailure);

- (void) testRecognitionCompleted {
    NSLog(@"A test file that was submitted for recognition is now complete.");

//This is never called
- (void) wavWasSavedAtLocation:(NSString *)location {
    NSLog(@"WAV was saved at the path %@", location);
    self.audioFilePath = location;

- (IBAction)startPlayback:(id)sender {
    [self.saveThatWaveController stop];
    [[OEPocketsphinxController sharedInstance] stopListening];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"%@", self.audioFilePath); // this returns (null)
        NSURL *fileURL = [NSURL URLWithString:self.audioFilePath];
        NSError *error;
        self.musicPlayer = [[AVAudioPlayer alloc]
                            initWithContentsOfURL:fileURL error:&error];
        if (error) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Playback Error" message:@"There was a problem playing the file." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
            NSLog(@"%@", error);
        else {
            [self.musicPlayer prepareToPlay];
            [self.musicPlayer play];


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.openEarsEventsObserver = [[OEEventsObserver alloc] init];
    [self.openEarsEventsObserver setDelegate:self];
    self.saveThatWaveController = [[SaveThatWaveController alloc] init];
    OELanguageModelGenerator *lmGenerator = [[OELanguageModelGenerator alloc] init];
    NSArray *words = [NSArray arrayWithObjects:@"WORD", @"STATEMENT", @"OTHER WORD", @"A PHRASE", nil];
    NSString *name = @"NameIWantForMyLanguageModelFiles";
    NSError *err = [lmGenerator generateLanguageModelFromArray:words withFilesNamed:name forAcousticModelAtPath:[OEAcousticModel pathToModel:@"AcousticModelEnglish"]]; // Change "AcousticModelEnglish" to "AcousticModelSpanish" to create a Spanish language model instead of an English one.
    NSString *lmPath = nil;
    NSString *dicPath = nil;
    if(err == nil) {
        lmPath = [lmGenerator pathToSuccessfullyGeneratedLanguageModelWithRequestedName:@"NameIWantForMyLanguageModelFiles"];
        dicPath = [lmGenerator pathToSuccessfullyGeneratedDictionaryWithRequestedName:@"NameIWantForMyLanguageModelFiles"];
    } else {
        NSLog(@"Error: %@",[err localizedDescription]);
    [[OEPocketsphinxController sharedInstance] setActive:TRUE error:nil];
    [[OEPocketsphinxController sharedInstance] startListeningWithLanguageModelAtPath:lmPath dictionaryAtPath:dicPath acousticModelAtPath:[OEAcousticModel pathToModel:@"AcousticModelEnglish"] languageModelIsJSGF:NO]; // Change "AcousticModelEnglish" to "AcousticModelSpanish" to perform Spanish recognition instead of English.
    [self.saveThatWaveController start]; // For saving WAVs from OpenEars or RapidEars

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.