На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Отображение уровня микрофона , с помощью OpenNETCF
    Пытаюсь отобразить уровень входящего сигнала (максимальные значения сэмплов на отрезках записи) на микрофоне. Пользуюсь OpenNETCF.Media.WaveAudio.Recorder.RecordFor (описание).

    ExpandedWrap disabled
                  _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.


    Прошу помощи в выявлении ошибки.
    Сообщение отредактировано: aush -
      Ну попробуй позицию в потоке на ноль выставлять перед чтением.
      Типа

      ExpandedWrap disabled
        if (recorderMStream.CanSeek) recorderMStream.Seek(0, SeekOrigin.Begin);
      Сообщение отредактировано: Felan -
        Цитата Felan @
        Ну попробуй позицию в потоке на ноль выставлять перед чтением.
        Типа

        ExpandedWrap disabled
          if (recorderMStream.CanSeek) recorderMStream.Seek(0, SeekOrigin.Begin);

        Спасибо за замечание. Обнаружил у себя еще одну ошибку - решил все немного упростить, но результат не сильно изменился.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0309 ]   [ 16 queries used ]   [ Generated: 28.04.24, 07:25 GMT ]