Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа со звуковухой, Как создать подобие частотной диаграммы? 
:(
    Опции темы
VAVII
Дата 7.1.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 7.1.2006

Репутация: нет
Всего: нет



Все так или иначе ставили себе такай продукт как WinAmp!
Многие видели в главном его окне "прыгающие полоски" или "осцилограмму"!
Никто не задавался вопросом как используя стандартные устройства Windows, Mixer, WaveOut и тд, можно сделать что-то подобное в альтернативном окошке?
Если у кого есть какие мысли, делитесь!
PM MAIL   Вверх
welt
Дата 7.1.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.5.2005
Где: UnderGround

Репутация: нет
Всего: нет



смотри тут
PM MAIL   Вверх
VAVII
Дата 7.1.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 7.1.2006

Репутация: нет
Всего: нет



очень интересно! но тема в другом!

На выход звуковой карточки подается звук, скажем так, мне нужна осцилограмма выхода звуковухи.
Помогите... smile
PM MAIL   Вверх
welt
Дата 7.1.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.5.2005
Где: UnderGround

Репутация: нет
Всего: нет



VAVII Поясни что такое выход звуковухи?
Что ты делаешь? Откуда подается звук, и т.д. ???
PM MAIL   Вверх
welt
Дата 8.1.2006, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.5.2005
Где: UnderGround

Репутация: нет
Всего: нет



Для изменения громкости умножай значения сэмплов на нужную тебе величину. 
Короче, можно просматривать осцилограмму не только с микрофона.
Можно в свойствах записи выбрать Wave Out или Mix Mono Out
или Line in. И тогда выводить или с колонок от копма (подключены к компу),
или же например с внешнего устройства.
Я набрал ее на Делфи. 
Если не получится, пиши, пришлю исходник...
Так... 
не нашел ссылки, поэтому вложил. 

Присоединённый файл ( Кол-во скачиваний: 173 )
Присоединённый файл  Record_oscil.zip 2,36 Kb
PM MAIL   Вверх
VAVII
Дата 8.1.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 7.1.2006

Репутация: нет
Всего: нет



Все ништяк! Работает как надо! Большое спасибо!!

.::VaV::.
PM MAIL   Вверх
SAVANE
Дата 24.10.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 20.7.2006
Где: Украина, Полтава

Репутация: нет
Всего: 1



Я с кодом не разобрался, что в верхней ссілке, пришли если есть екзешник плиз. А во второй проге работает как часы, а можно ли там сделать так чтоб сигнал не с микрофона, а тот сигнал который посылает моя прога на звуковую.
--------------------
Be not afraid of growing slowly, be afraid only of standing still!
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 24.10.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(SAVANE @  24.10.2006,  15:36 Найти цитируемый пост)
Я с кодом не разобрался, что в верхней ссілке, пришли если есть екзешник плиз.


Посмотрите на срок давности темы. Она же от 8.1.2006. Продолжать ее обсуждение можно, но ждать, что автор вскоре появится и поможет - нет. 

Цитата(SAVANE @  24.10.2006,  15:36 Найти цитируемый пост)
а можно ли там сделать так чтоб сигнал не с микрофона

Я думаю, что если брать с Mixera  то это будет самое то, что надо.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SAVANE
Дата 25.10.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 20.7.2006
Где: Украина, Полтава

Репутация: нет
Всего: 1



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Forms,
  Dialogs, MMSystem;

type
  TWavArrayBuf = array[0..1023]of byte;
  PWavArrayBuf = ^TWavArrayBuf;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    WaveFormat: TWaveFormatEx;
    WaveIn: PHWaveIn;
    procedure WndProc(var Msg: TMessage); override;
    function InitWaveIn: Boolean;
    procedure CloseWaveIn;
  end;

var
  Form1: TForm1;

implementation

uses Math;

{$R *.dfm}

function TForm1.InitWavein: Boolean;
var
  I, Err: Integer;
  WaveHdr: PWaveHdr;
  WavBuff: PWavArrayBuf;

  procedure FreeData;
  begin
    if WavBuff <> nil then Dispose(WavBuff);
    if WaveHdr <> nil then Dispose(WaveHdr);
    if WaveIn <> nil then Dispose(WaveIn);
  end;

begin
  Result := False;
  WaveFormat.wFormatTag := WAVE_FORMAT_PCM;
  WaveFormat.nChannels := 1; 
  WaveFormat.nSamplesPerSec := 44100;
  WaveFormat.nAvgBytesPerSec := 44100;
  WaveFormat.nBlockAlign := 4;
  WaveFormat.wBitsPerSample := 8;
  WaveIn := New(PHWaveIn);
  Err := WaveInOpen(WaveIn, 0, @WaveFormat, Handle, 0, CALLBACK_WINDOW);
  if Err <> 0 then Exit;
  for i:=1 to 8 do
  begin
    WavBuff := New(PWavArrayBuf);
    WaveHdr := New(PWaveHdr);
    with WaveHdr^ do
    begin
      lpData := Pointer(WavBuff);
      dwBufferLength := SizeOf(WavBuff);
      dwBytesRecorded := 0;
      dwUser := 0;
      dwFlags := 0;
      dwLoops := 0;
    end;
    Err := WaveInPrepareHeader(WaveIn^, WaveHdr, SizeOf(TWaveHdr));
    if Err <> 0 then
    begin
      FreeData;
      Exit;
    end;
    Err := WaveInAddBuffer(WaveIn^, WaveHdr, Sizeof(TWaveHdr));
    if Err <> 0 then
    begin
      FreeData;
      Exit;
    end;
  end;
  Err := WaveInStart(WaveIn^);
  if Err <> 0 then
  begin
    FreeData;
    Exit;
  end;
  Result := True;
end;

Procedure Tform1.WndProc(var Msg: TMessage);
var
  Hdr: PWaveHdr;
  I: Integer;
  R: Real;
begin
  inherited;
  case Msg.Msg of
    MM_WIM_DATA:
    begin
      Hdr := PWaveHdr(Msg.LParam);
      if Hdr^.dwBytesRecorded = 0 then Exit;
      R := IfThen(Hdr^.dwBytesRecorded > 0,
        ClientWidth / Hdr^.dwBytesRecorded, 0);
      PatBlt(Canvas.Handle, 0, 0, ClientWidth,  ClientHeight, PATCOPY);
      Canvas.Pen.Color:=clRed;
      Canvas.MoveTo(0, 127);
      Canvas.LineTo(ClientWidth, 127);
      Canvas.Pen.Color := clMaroon;
      for I := 1 to 12 do
      begin
        Canvas.MoveTo(Round(R * (I * 100)), 0);
        Canvas.LineTo(Round(R * (I * 100)), 255);
      end;
      Canvas.Pen.Color:=clLime;
      Canvas.MoveTo(0, PWavArrayBuf(Hdr.lpData)^[0]);
      for I := 0 to Hdr^.dwBytesRecorded - 1 do
        Canvas.LineTo(Round(R * I), PWavArrayBuf(Hdr.lpData)^[I]);

      WaveInUnprepareHeader(WaveIn^, Hdr, Sizeof(TWaveHdr));
      Dispose(hdr.lpData);
      DisPose(hdr);

      Hdr := New(PWaveHdr);
      Hdr^.lpData := Pointer(New(PWavArrayBuf));
      Hdr^.dwBufferLength := 1024;
      Hdr^.dwBytesRecorded := 0;
      Hdr^.dwUser := 0;
      Hdr^.dwFlags := 0;
      Hdr^.dwLoops := 0;

      WaveInPrepareHeader(WaveIn^, Hdr, Sizeof(TWaveHdr));
      WaveInAddBuffer(WaveIn^, Hdr, Sizeof(TWaveHdr));
    end;
  end;
end;

procedure TForm1.CloseWaveIn;
begin
  WaveInStop(WaveIn^);
  if WaveIn <> nil then
  begin
    WaveInReset(WaveIn^);
    WaveInClose(WaveIn^);
  end;
  Dispose(WaveIn);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
  Height := 282;
  Width := 1000;
  Color := clBlack;
  if not InitWaveIn then ShowMessage(SysErrorMessage(GetLastError));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CloseWaveIn;
end;

end.


Подскажите плиз где здесь прописывается, что берется сигнал именно с микрофона а не с любого другого выхода!  smile 
--------------------
Be not afraid of growing slowly, be afraid only of standing still!
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 25.10.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



В функции function TForm1.InitWavein: Boolean;
идет вызов 
Err := WaveInOpen(WaveIn, 0, @WaveFormat, Handle, 0, CALLBACK_WINDOW);
(56-я строка)
Второй параметр uDeviceID - идентификатор устройства для получения сигнала

Цитата

uDeviceID 
  Identifier of the waveform-audio input device to open. It can be either a device identifier or a handle of an   open waveform-audio input device. You can use the following flag instead of a device identifier. 


Функция waveInGetNumDevs - возвращает число устройств для получения звука (все ID от 0 до возвращаемого значения могут использоваться как устройства для получения аудио сигнала)

Добавлено @ 11:03 
Чтобы узнать характеристики кождого из устройств надо вызвать функцию
waveInGetDevCaps
Код

MMRESULT waveInGetDevCaps(
  UINT_PTR     uDeviceID, 
  LPWAVEINCAPS pwic,      
  UINT         cbwic      
);

И передать ей допустимый ID. Структура LPWAVEINCAPS pwic - даст необходимое описание устройства с указанным ID.

Добавлено @ 11:07 
Эту многую другую информацию можно легко найти в MSDN в разделе
"Waveform Audio"


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SAVANE
Дата 25.10.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 20.7.2006
Где: Украина, Полтава

Репутация: нет
Всего: 1



Часно, никогда пока с этим не стыкался.
Где мона про это почитать, подскажи плиз, а то мне как то неудобно задавать тупые вопросы.

--------------------
Be not afraid of growing slowly, be afraid only of standing still!
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 25.10.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



На русском языке я нашел такую "Н. Секунов. Обработка звука на PC"
Она есть и в электронном варианте (не помню где качал), но по мне в MSDN все строго и четко описано. По крайней мере этот раздел.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 26.10.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0889 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.