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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись звука 
:(
    Опции темы
NoName
Дата 4.3.2003, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно 2 реализации:
1) Как записать звук с линейного выхода в файл?
2) Как прослушать звук с линейного входа на удаленном компьютере и записать на клиенте?
PM MAIL ICQ   Вверх
Vit
Дата 4.3.2003, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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





--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
NoName
Дата 4.3.2003, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это понятно, а как сделать без использования MediaPlayer?
PM MAIL ICQ   Вверх
stab
Дата 4.3.2003, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



unit receiver;

interface

uses mmsystem, classes;

const
samp_per_sec = 44100;
samp_cnt = samp_per_sec div 5;
buf_len = samp_cnt * 2;

type
PSample16M = ^TSample16M;
TSample16M = SmallInt;

PArrayOfSample = ^TArrayOfSample;
TArrayOfSample = array[1..samp_cnt] of TSample16M;

TReceiver = class
private
hwi: Integer;
fmt: tWAVEFORMATEX;
whdr1: WAVEHDR;
buf1: TArrayOfSample;
whdr2: WAVEHDR;
buf2: TArrayOfSample;

FStoped: Boolean;

FOnChange: TNotifyEvent;

procedure SetStoped(const Value: Boolean);
public
Peak: Integer;
Buffer: PArrayOfSample;

destructor Destroy; override;

procedure Start;
procedure Stop;

property Stoped: Boolean read FStoped write SetStoped;

property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;

var
rec: TReceiver;

implementation

procedure waveInProc(const hwi, uMsg, dwInstance: Integer; var hdr: WAVEHDR; const dwP2: Integer); stdcall;
const
divs = samp_cnt div 100;
var
i, p: Integer;
buf: PArrayOfSample;
begin
if rec.Stoped then Exit;
case uMsg of
WIM_OPEN: begin
end;
WIM_DATA: begin
rec.Buffer := PArrayOfSample(hdr.lpData);
buf := PArrayOfSample(hdr.lpData);
p := 0;
for i := 0 to samp_cnt div divs do
p := p + Abs(buf[i * divs]);
rec.Peak := p div (samp_cnt div divs);
if Assigned(rec.FOnChange) then rec.FOnChange(rec);
waveInUnprepareHeader(hwi, @hdr, SizeOf(WAVEHDR));
waveInPrepareHeader(hwi, @hdr, SizeOf(WAVEHDR));
waveInAddBuffer(hwi, @hdr, SizeOf(WAVEHDR));
end;
WIM_CLOSE: begin
end;
end;
end;

{ TReceiver }

destructor TReceiver.Destroy;
begin
Stoped := True;
inherited;
end;

procedure TReceiver.SetStoped(const Value: Boolean);
begin
FStoped := Value;

if Value then begin
waveInStop(hwi);
waveInUnprepareHeader(hwi, @whdr1, SizeOf(WAVEHDR));
waveInUnprepareHeader(hwi, @whdr2, SizeOf(WAVEHDR));
waveInReset(hwi);
waveInClose(hwi);
end
else begin
with fmt do begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := 1;
nSamplesPerSec := samp_per_sec;
nBlockAlign := 2;
nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
wBitsPerSample := 16;
cbSize := 0;
end;
waveInOpen(@hwi, WAVE_MAPPER, @fmt, Cardinal(@waveInProc), hInstance, CALLBACK_FUNCTION);

with whdr1 do begin
lpData := @buf1;
dwBufferLength := buf_len;
dwBytesRecorded := 0;
dwUser := 0;
dwFlags := 0;
dwLoops := 0;
lpNext := nil;
reserved := 0;
end;
waveInPrepareHeader(hwi, @whdr1, SizeOf(WAVEHDR));
waveInAddBuffer(hwi, @whdr1, SizeOf(WAVEHDR));

with whdr2 do begin
lpData := @buf2;
dwBufferLength := buf_len;
dwBytesRecorded := 0;
dwUser := 0;
dwFlags := 0;
dwLoops := 0;
lpNext := nil;
reserved := 0;
end;
waveInPrepareHeader(hwi, @whdr2, SizeOf(WAVEHDR));
waveInAddBuffer(hwi, @whdr2, SizeOf(WAVEHDR));

waveInStart(hwi);
end;
end;

procedure TReceiver.Start;
begin
Stoped := False;
end;

procedure TReceiver.Stop;
begin
Stoped := True;
end;

initialization

rec := TReceiver.Create;

finalization

rec.Free;

end.

вот. smile.gif отображать уровень можно через поле Peak при событии OnChange, там же (в этом событии) можно работать с полем Buffer в котором как раз содержется записанный сигнал.
Вся работа осуществляется через глобальную переменную rec . Возможно это не лучшая реализация с точки зрения ООП, но работает smile.gif Запись происходит с глубиной 16 бит и частотой 44100 в режиме моно. После небольшой переделки все это может работать с любыми частотами и каналами и глубинами.

2 Vit: засунь это в ФАК, плиз, если это не очень убого smile.gif)


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
NoName
Дата 4.3.2003, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тогда еще два вопроса раз зашевелились люди ;) как передать звук по локалке и на клиенте записать? и второй вопрос: как писать стерео сигнал в разные файлы по каналам?

P.S. Думаю что на этот вопрос тут уже не ответят... но всякое может быть
PM MAIL ICQ   Вверх
NoName
Дата 4.3.2003, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И опять же, пример что ты кинул мне давал еще Озеров, этот пример есть в его сборнике faq, в этом примере отсутствует сохранение потока в файл, а это опять же очень интересно, я думаю
PM MAIL ICQ   Вверх
stab
Дата 6.3.2003, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



в чем проблема я понять не могу?! записывать звук можешь? формат *.wav файлов знаешь? что такое сокет знаешь? или ты хочеш что б я те готовую прогу выложил?! если так то скока заплатиш sad.gif((


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
NoName
Дата 6.3.2003, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да уж, это называется форум. Если говоришь об оплате то нефиг писать тут, я так понимаю сама концепция форума подразумевает помощь в ответе на вопрос, а не продажа какого-то кусочка программы выдранной откуда-то. Все с тобой ясно
PM MAIL ICQ   Вверх
AntonSaburov
Дата 6.3.2003, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата
Да уж, это называется форум. Если говоришь об оплате то нефиг писать тут, я так понимаю сама концепция форума подразумевает помощь в ответе на вопрос, а не продажа какого-то кусочка программы выдранной откуда-то. Все с тобой ясно


Форум подразумевает помощь в критических или непонятных ситуациях. Тебе дают направление - а дальше уже сам двигаешься. А ты хочешь по сути полностью готовое приложение.
Если ты в целях обучения это делаешь - то пойми, что здесь часто появляются люди для которых программирование - это работа. И они не могут тратить много своего времени. Им просто надо кормить свои семьи, родителей.
А если тебе по работе надо - так это ТВОЯ работа и старайся ее делать все-таки сам.

Целиком такую программу написать - это достаточно долгий процесс (Если пример занимает больше 30 минут, то это уже долго).

Может нам в помощь тебе и за твоей девушкой ухаживать ? biggrin.gif
Без обид. Просто хотелось донести основную идею.

PM MAIL WWW ICQ   Вверх
NoName
Дата 6.3.2003, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Идея понятно, теперь на все вопросы буду отвечать, а сколько заплатишь. Без обид
PM MAIL ICQ   Вверх
Vit
Дата 6.3.2003, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Модератор: давайте прекратим споры, тем более в этом направлении. На форуме действительно отвечают на конкретно заданный вопрос, а не на просьбу написать программу целиком. По теме было приведено 2 ответа по существу. Вопрос к автору топика - они достаточно исчерпывающие или требуются объяснения, дополнения или другие решения?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
NoName
Дата 7.3.2003, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Запрещено:

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

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

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

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


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

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


 




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


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

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