2013-03-09 20 views
7

Próbuję zrobić coś takiego, nagrywam dźwięk i na podstawie dźwięku (wysokość, częstotliwość, nie jestem pewien) obraz powinien się poruszać.przenoszenie obrazu na podstawie częstotliwości dźwięku?

Jestem w stanie osiągnąć nagranie, również sekwencję obrazów w miejscu, ale oddzielnie. nie jestem pewien, jak połączyć to, tylko dla informacji, staram się osiągnąć coś podobnego ustach wchodzącego na rynek aplikacji: app url here

Moje pytanie brzmi, jak mogę przenieść/animate obrazu na podstawie częstotliwości dźwięku .

Dzięki

+0

Czy to dosłownie aplikacja, która porusza ustami czegoś, co udaje, że mówi? Większość systemów konwersji tekstu na mowę pozwala uzyskać strumienie danych o tym, jaki dźwięk fonetyczny powinien wykonywać ustnik podczas odtwarzania za pomocą funkcji wywołania zwrotnego. Czy to był tylko przykład? – ojblass

+0

Tak, przykład jest bardzo podobny do mojego wymogu. Przykład działa na głos w czasie rzeczywistym, ale pracuję nad nagranym dźwiękiem. Mam na myśli, że użytkownik może najpierw nagrać dźwięk, a kiedy odtwarza nagrany dźwięk, usta poruszają się zgodnie z częstotliwość/wysokość dźwięku. – iscavengers

Odpowiedz

5

Skończyłem z rozwiązaniem. Wykorzystano Diraca i problem rozwiązany.

Edytuj:

Co to jest?

DiracAudioPlayer to nowy zestaw klas Cocoa, który w wygodny sposób otacza całą funkcjonalność Diraca, udostępniając interfejs API podobny do tego, który oferuje AVAudioPlayer. Zauważ, że nie jest to podklasa AVAudioPlayer. Poniżej przedstawiono podstawowe funkcje i opis interfejsu API.

DiracAudioPlayer Rdzeń Cechy

DiracAudioPlayer to zestaw klas, które pozwalają na odtwarzanie plików w oparciu o różnych formatach audio (w tym MPMediaItems), jednocześnie zmieniając prędkość i wysokość pliku audio w czasie rzeczywistym. Wersja 3.6 składa się z DiracAudioPlayerBase (klasa bazowa dbająca o plik IO i odtwarzanie), DiracAudioPlayer (owijanie Dirac Core API) i DiracFxAudioPlayer (owijanie interfejsu API DiracFx).

Upewnij się, że uwzględniłeś wszystkie 3 klasy w swoim projekcie, a także foldery "ExtAudioFile" i "util", i dodałeś do projektu Accelerate.framework i CoreAudio.framework. Na MacOS X będziesz musiał dodać także AudioUnit.framework, na iOS będziesz musiał dodać AudioToolbox.framework, AVFoundation.framework, MediaPlayer.framework i CoreMedia.framework.

DiracAudioPlayer jest ...

... Apple kompatybilne klasa odtworzyć czas rozciągnięty dźwięku, który działa zarówno na iOS (wersja 4 i wyższe) oraz MacOS X (wersja 10.6 i wyższe) ... bardzo łatwy w użyciu ... całkowicie ARC zgodną ... dostarczone do Ciebie w tym pełnym kodem źródłowym

DiracAudioPlayer API

Wersja 3.6 wydana w listopadzie 2012 oferuje następujące połączenia:

- (id) initWithContentsOfURL:(NSURL*)inUrl channels:(int)channels error: (NSError **)error; 

Initializes and returns an audio player for playing a designated sound file. A URL identifying the sound file to play. The audio data must be in a format supported by Core Audio. Pass in the address of a nil-initialized NSError object. If an error occurs, upon return the NSError object describes the error. To use an item from the user's iPod library supply the URL that you get via MPMediaItem's MPMediaItemPropertyAssetURL property as inUrl. Note that FairPlay protected content can NOT be processed. 


- (void) setDelegate:(id)delegate; 
- (id) delegate; 

Ustaw/zdobądź delegata klasy. Jeśli wdrożyć protokół delegata DiracAudioPlayer zadzwoni na realizację

- (void)diracPlayerDidFinishPlaying:(DiracAudioPlayerBase *)player successfully:(BOOL)flag 

Kiedy to się robi gra

- (void) changeDuration:(float)duration; 
- (void) changePitch:(float)pitch; 

zmiana prędkości odtwarzania i boiska

- (NSInteger) numberOfLoops; 
- (void) setNumberOfLoops:(NSInteger)loops; 

A value of 0, which is the default, means to play the sound once. Set a positive integer value to specify the number of times to return to the start and play again. For example, specifying a value of 1 results in a total of two plays of the sound. Set any negative integer value to loop the sound indefinitely until you call the stop method. 

- (void) updateMeters; 

Musi być wywołana przed wywołaniem -peakPowerForChannel w celu aktualizacji wewnętrznych pomiarów

- (float) peakPowerForChannel:(NSUInteger)channelNumber; 

A floating-point representation, in decibels, of a given audio channel’s current peak power. A return value of 0 dB indicates full scale, or maximum power; a return value of -160 dB indicates minimum power (that is, near silence). If the signal provided to the audio player exceeds ±full scale, then the return value may exceed 0 (that is, it may enter the positive range). To obtain a current peak power value, you must call the updateMeters method before calling this method. 


- (BOOL) prepareToPlay; 

Starts the Dirac processing thread and prepares the sound file for playback. If you don't call this explicitly it will be called when calling -play 


- (NSUInteger) numberOfChannels; 

Liczba kanałów audio w dźwięku powiązanym z odtwarzaczem audio. (tylko do odczytu)

- (NSTimeInterval) fileDuration; 

Powoduje zwrócenie całkowitego czasu trwania (w sekundach) dźwięku związanego z odtwarzaczem audio. (tylko do odczytu)

- (NSTimeInterval) currentTime; 
- (void) setCurrentTime:(NSTimeInterval)time 

Returns the current play time in the input file. Note that if you apply time stretching, -currentTime will reflect the slowed down time depending on the time stretch factor. 

IMPORTANT CHANGE: In previous versions this value returned the total play time independent of the position in the file. Please update your code accordingly to reflect the change 

Setting this property causes playback to fast forward or rewind to the specified play time. 


- (void) play; 

Plays a sound asynchronously. Returns YES on success, or NO on failure. Calling this method implicitly calls the -prepareToPlay method if the audio player is not already prepared to play. 

- (NSURL*) url; 

Adres URL dźwięku związanego z odtwarzaczem audio. (tylko do odczytu)

- (void) setVolume:(float)volume; 
- (float) volume; 

Wzmocnienie odtwarzania dla odtwarzacza audio w zakresie od 0,0 do 1,0.

- (BOOL) playing; 

A Boolean value that indicates whether the audio player is playing (YES) or not (NO). (read-only). To find out when playback has stopped, use the diracPlayerDidFinishPlaying:successfully: delegate method. 

- (void) pause; 

Pauses playback; sound remains ready to resume playback from where it left off. Calling pause leaves the audio player prepared to play; it does not release the audio hardware that was acquired upon calling -play or -prepareToPlay. 

- (void) stop; 

Stops playback and undoes the setup needed for playback. Calling this method, or allowing a sound to finish playing, undoes the setup performed upon calling the -play or -prepareToPlay methods. 
+0

Czy możesz opracować więcej o 'Dirac'; ponieważ może pomóc innym w przyszłości. zajęcie się tym. – viral

+0

@Matt ... done :) dziękuję za sugestię – iscavengers

1

Większość text-to-speech systemy pozwoli Ci zarejestrować funkcję zwrotną, że wyśle ​​fonem (w ujęciu laików dźwięk), które jest produkowane. Spójrz na następujące link. Kliknij callback po lewej stronie. Spójrz na SpeechPhonemeProcPtr, który pozwoli ci zarejestrować funkcję, która zostanie wywołana, gdy hałas będzie "uh", "th", "ah" lub jakikolwiek szum. Następnie zaktualizowałbyś swój obraz tak, by wyglądał, jak powinny wyglądać usta danej osoby, wykonując ten konkretny dźwięk. Było to bardzo łatwe w przypadku ViaVoice firmy IBM i nigdy nie zakodowałem takiej aplikacji na iPhonie, ale uważam, że jest to lepsze rozwiązanie niż próba dopasowania dźwięku.

Jeśli jest to naprawdę niefiltrowane audio, które próbujesz dopasować, możesz przekazać je do systemu rozpoznawania głosu i przekazać rozpoznany tekst do systemu TTS i uzyskać fonemy.

Powiązane problemy