|
|
|||||
Регистрация: Oct 2009
Сообщений: 174
|
Что понимается под распознаванием голоса?
Либо это перевод речи в буквы и слова и предложения и т.д., или это распознавание голоса и отнесение его к конкретному человеку (т.е. по тембру или както там еще)? В любом случае эти вещи давно придуманы и на флеш перевести особой проблемы нет. |
|
|||||
если надо а отличить от б то можно попробовать так. Нарисовать кривую спектрограммы (исходников полно, даже в хелпе есть) сделать 10 штук спекторгамм буков а и б и сравнивать их с новой спектрограммой. Где процент будет больше та и буква. Это пока идея х, тк до сих пор нет вменяемых гаджетов с голосовым управлением. Можно наверно отличить и от о к примеру.
__________________
Гоночка |
|
|||||
Регистрация: Jan 2010
Адрес: владивосток
Сообщений: 250
|
необходимо пока отдельные понимаемые фразы, поэтому я думаю проблемм в этом не будет, но вот тогда такой вопрос как во флеше извлекать из звука эту спектограмму
|
|
|||||
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
есть computeSpectrum для всего звука и extract для Sound, а ещё для микрофона есть SampleDataEvent
Например: (взято из хелпа) const DELAY_LENGTH:int = 4000; var mic:Microphone = Microphone.getMicrophone(); mic.setSilenceLevel(0, DELAY_LENGTH); mic.gain = 100; mic.rate = 44; mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); function micSampleDataHandler(event:SampleDataEvent):void { const PLOT_HEIGHT:int = 200; const CHANNEL_LENGTH:int = 256; var g:Graphics = this.graphics; g.clear(); g.lineStyle(0, 0x6600CC); g.beginFill(0x6600CC); g.moveTo(0, PLOT_HEIGHT); var n:Number = 0; var i:uint = 0; while (event.data.bytesAvailable) { n = (event.data.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); ++i; } g.lineTo(0, PLOT_HEIGHT); g.endFill(); } const DELAY_LENGTH:int = 4000; var mic:Microphone = Microphone.getMicrophone(); mic.setSilenceLevel(0, DELAY_LENGTH); mic.gain = 100; mic.rate = 44; mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); var timer:Timer = new Timer(DELAY_LENGTH); timer.addEventListener(TimerEvent.TIMER, timerHandler); timer.start(); var soundBytes:ByteArray = new ByteArray(); function micSampleDataHandler(event:SampleDataEvent):void { while (event.data.bytesAvailable) { var sample:Number = event.data.readFloat(); soundBytes.writeFloat(sample); } } function timerHandler(event:TimerEvent):void { mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); timer.stop(); soundBytes.position = 0; var sound:Sound = new Sound(); sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler); sound.play(); } function playbackSampleHandler(event:SampleDataEvent):void { for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++) { var sample:Number = soundBytes.readFloat(); event.data.writeFloat(sample); event.data.writeFloat(sample); } } addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event):void { var bytes:ByteArray = new ByteArray(); const PLOT_HEIGHT:int = 200; const CHANNEL_LENGTH:int = 256; SoundMixer.computeSpectrum(bytes, true, 0); var g:Graphics = this.graphics; g.clear(); g.lineStyle(0, 0x6600CC); g.beginFill(0x6600CC); g.moveTo(0, PLOT_HEIGHT); var n:Number = 0; for (var i:int = 0; i < CHANNEL_LENGTH; i++) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); g.endFill(); g.lineStyle(0, 0xCC0066); g.beginFill(0xCC0066, 0.5); g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); for (i = CHANNEL_LENGTH; i > 0; i--) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(0, PLOT_HEIGHT); g.endFill(); } Последний раз редактировалось kseniya; 20.03.2011 в 16:13. |
|
|||||
Регистрация: Oct 2009
Сообщений: 174
|
Плюс можно сделать словарь слов и потом распознанное слово сравнивать со словарем, чтобы свести ошибки к минимуму.
|
Часовой пояс GMT +4, время: 00:26. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|