2009-05-07 14 views
9

Ho un programma che riceve un flusso audio (mono) di bit da TCP/IP. Mi chiedo se l'API vocale (riconoscimento vocale) in Mac OS X sia in grado di fare una trasformazione speech-to-text per me.API di sintesi vocale di Mac OS X. Come?

(Non mi interessa salvare l'audio in .wav prima e leggerlo come opposto per eseguire la trasformazione al volo).

Ho letto la documentazione ufficiale on-line, è un po 'di confusione. E non ho trovato nessun buon esempio su questo argomento.

Inoltre, devo fare in Cocoa/Carbon/Java o Objective-C?

qualcuno può far luce?

Grazie.

risposta

6

C'è un numero di esempi che vengono copiati in/Developer/Examples/Speech/Recognition quando si installa XCode.

La classe di cacao per il riconoscimento vocale è NSSpeechRecognizer. Non l'ho usato ma, per quanto ne so, il riconoscimento vocale richiede che tu costruisca una grammatica per aiutare il motore a scegliere tra una serie di scelte piuttosto che consentire di passare l'immissione in forma libera. Questo è tutto spiegato negli esempi di cui sopra.

6

Questo arriva un po 'tardi, forse, ma io carillon in ogni caso.

Le funzioni di riconoscimento vocale in OS X (sia sul lato Carbon che Cocoa delle cose) sono per il riconoscimento del comando vocale, il che significa che riconosceranno parole (o frasi, comandi) che sono stati caricati nella lingua del sistema vocale modello. Ho fatto alcune cose con piccoli dizionari e funziona abbastanza bene, ma se vuoi riconoscere parole arbitrarie, le cose possono diventare più pelose.

Qualcos'altro da tenere a mente è che la funzionalità fornita dalle API vocali in OS X non è una ad una. La roba di Carbon fornisce funzionalità che non hanno raggiunto NSSpeechRecognizer (i documenti ne fanno menzione).

Non so Cocoa, ma il Carbon Speech Recognition Manager consente di specificare input diversi da un microfono, quindi un flusso audio funzionerebbe perfettamente.

1

È possibile utilizzare uno dei ApplicationServices SpeechSynthesis (10.0+)

CFStringRef cfstr = CFStringCreateWithCString(NULL,"Hello World!", kCFStringEncodingMacRoman); 
Str255 pstr;  
CFStringGetPascalString(cfstr, pstr, 255, kCFStringEncodingMacRoman); 
SpeakString(pstr); 

o di AppKit NSSpeechSynthesizer (10.3+)

NSSpeechSynthesizer *synth = [[NSSpeechSynthesizer alloc] initWithVoice:@"com.apple.speech.synthesis.voice.Alex"]; 
[synth startSpeakingString:@"Hello world!"]; 
+0

Questo è per sintetizzare il parlato (sintesi vocale), non riconoscere il parlato (sintesi vocale). –

+0

sembra che intendessi questa risposta per una domanda diversa .. e ora non riesco a trovarlo – valexa