Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.117.77] |
|
Сообщ.
#1
,
|
|
|
Пытаюсь отобразить уровень входящего сигнала (максимальные значения сэмплов на отрезках записи) на микрофоне. Пользуюсь OpenNETCF.Media.WaveAudio.Recorder.RecordFor (описание).
_recorderMStream = new MemoryStream(65536); _recorder.RecordFor(_recorderMStream, 5, SoundFormats.Mono16bit11kHz); var buffer = new byte[2]; var samples = new short[800]; int max; int samplesL = 0; int b0; int b1; if (_recorderMStream.CanSeek) _recorderMStream.Seek(0, SeekOrigin.Begin); while (true) { if ((b0 = _recorderMStream.ReadByte()) == -1) break; buffer[0] = (byte)b0; if ((b1 = _recorderMStream.ReadByte()) == -1) break; buffer[1] = (byte)b1; samples[samplesL++] = BitConverter.ToInt16(buffer, 0); _blocksLengthFStreamWrtr.WriteLine(samples[samplesL - 1].ToString()); if (samplesL == 800) { max = 0; for (var i = 0; i < SmplsToCalclvl; ++i) { if (samples[i] > max) max = samples[i]; } max = max * 100 / 32768; miclevelpbar.Invoke(new EventHandler(delegate { miclevelpbar.Value = max; })); samplesL = 0; } } Проблема в том, что в MemoryStream данные попадают, а в buffer залезать не хотят - readed всегда 0. UPD: в текущем варианте, из MemoryStream-а читается wav-header, а когда дело доходит со самих данных, ReadByte выдает -1. Прошу помощи в выявлении ошибки. |
Сообщ.
#2
,
|
|
|
Ну попробуй позицию в потоке на ноль выставлять перед чтением.
Типа if (recorderMStream.CanSeek) recorderMStream.Seek(0, SeekOrigin.Begin); |
Сообщ.
#3
,
|
|
|
Цитата Felan @ Ну попробуй позицию в потоке на ноль выставлять перед чтением. Типа if (recorderMStream.CanSeek) recorderMStream.Seek(0, SeekOrigin.Begin); Спасибо за замечание. Обнаружил у себя еще одну ошибку - решил все немного упростить, но результат не сильно изменился. |