Конференция "Media" » bass.dll Получить уровень громкости
 
  • ancot (12.08.11 08:59) [0]
    Всем привет!
    Работаю с bass.dll. Есть необходимость быстро просканировать mp3 файл и получить пиковые значение уровня громкости на на каждую десятую(лучше тысячную) секунды(для отображения графика а-ля soundforge).
    BASS_ChannelGetLevel выдает уровень на текущую позицию канала.
    Пытался в цикле последовательно переставлять позицию на 1 байт и замерять громкость. Работает дико медленно.

         
    len := BASS_ChannelGetLength(chan, ASS_POS_BYTE);
         for i := 0 to len do
         begin
           BASS_ChannelSetPosition(chan, i, BASS_POS_BYTE );
           level := BASS_ChannelGetLevel(chan);
         end;



    Можно конечно получать значения громкости на каждую секунду, а не на байт. Но этого слишком большое разрешение.
    Может есть другое решение?
  • ancot (12.08.11 13:39) [1]
    Разобрался. ChannelBytes2Seconds и ChannelSeconds2Bytes работают не с целыми секундами, а с секундами с плавающей точкой


     len := BASS_ChannelGetLength(chan, BASS_POS_BYTE); // Длинна в байтах
     len_sec := BASS_ChannelBytes2Seconds(chan, len);  // Длинна в секундах
     pos := 0; //Позиция в секундах
     while (pos <= len_sec) do
     begin
       byte_pos := BASS_ChannelSeconds2Bytes(chan, pos); // Позиция в байтах
       BASS_ChannelSetPosition(chan, byte_pos, BASS_POS_BYTE);
       level := BASS_ChannelGetLevel(chan);
       ...
       pos := pos + 0.1; //Шаг 100 миллисекунд
    end;

  • QAZ (12.08.11 15:40) [2]
    ниправильно
  • ancot (16.08.11 08:15) [3]
    Может тогда намекнете какие еще есть варианты?
  • QAZ (16.08.11 11:29) [4]
    len := BASS_ChannelGetLength(chan, BASS_POS_BYTE); // Длинна в байтах
    while (BASS_ChannelGetPosition(chan,BASS_POS_BYTE) < len) do
    begin
      level := BASS_ChannelGetLevel(chan);
      left:=LOWORD(level);
      right:=HIWORD(level);
      ...
    end;



    BASS_ChannelGetLevel декодирует данные размером с буфер и выдает среднее значение амплитуды
    при этом позиция в файле смещается сама
    и ссответсно чтобы получить большее "разрешение" нужно использовать другие методы
  • zewwer © (22.10.13 16:17) [5]
    а какие еще методы можно использовать например?

    ___________
    http://www.stroyportal.ru/doc/normi/
 
Конференция "Media" » bass.dll Получить уровень громкости
Есть новые Нет новых   [134427   +38][b:0][p:0.001]