|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#46
|
||||
|
||||
Цитата:
|
#47
|
|||
|
|||
Цитата:
Код:
Sample := Massiv[I, J]; Но тип не сказали. Наверное Integer или Int64. Последний раз редактировалось Dmitry_DM, 12.08.2012 в 16:19. |
#48
|
|||
|
|||
Цитата:
Код:
procedure WriteWav(Sender: TObject); или так: Код:
procedure WriteWav(FileName, fmOpenReadWrite); Последний раз редактировалось Dmitry_DM, 12.08.2012 в 16:30. |
#49
|
||||
|
||||
Цитата:
Код:
procedure WriteWav(const FileName: String); |
#50
|
|||
|
|||
Цитата:
|
#51
|
||||
|
||||
Цитата:
Хотя наверно просто нажал кнопку "Предварительный просмотр сообщения" вместо "Ответить"... Я тоже не нашёл в вашей программе типа буфера. Значит его нужно объявлять и заполнять. А ещё лучше использовать в качестве буфера тот-же массив. Тогда первая процедура (ReadWave) заполнит этот буфер-массив, а вторая (WriteWav) прочитает из этого массива и запишет в wav-файл. |
#52
|
|||
|
|||
Цитата:
|
#53
|
||||
|
||||
Цитата:
Почему двумерный? Чтобы в одном измерении хранить сэмплы, а в другом каналы этих сэмплов. Почему динамический? Потому что нам заранее неизвестно сколько будет сэмплов и сколько каналов в читаемом wav-файле. Пример: Код:
type TMassiv = array of array of Integer; |
#54
|
|||
|
|||
Цитата:
|
#55
|
|||
|
|||
Ну помогите хоть кто-нибудь! Я уже не знаю, как там еще пробовать, пол ночи просидел, только ошибки с этими массивами, а вручную, получается на один раз, если предварительно написать все в самой программе.
|
#56
|
|||
|
|||
Здравствуйте еще раз! Вот процедура:
Код:
procedure WriteWav(const FileName: String); type TMassiv = array of array of Integer; TChunkID = packed array [0..3] of Char; THeader = packed record ChunkID : TChunkID; ChunkSize : Longword; Format : TChunkID; Subchunk1ID : TChunkID; Subchunk1Size : Longword; AudioFormat : Word; NumChannels : Word; SampleRate : Longword; ByteRate : Longword; BlockAlign : Word; BitsPerSample : Word; Subchunk2ID : TChunkID; Subchunk2Size : Longword; end; var Header: THeader; NumSamples, BytsPerSample, Sample, I, J: Longword; fs: TFileStream; Massiv: TMassiv; begin NumSamples := 1079; {Massiv[I, J];} BytsPerSample := 2; Header.ChunkID := 'RIFF' Header.Format := 'WAVE'; Header.Subchunk1ID := 'fmt '; Header.Subchunk1Size := 16; Header.AudioFormat := $0001; Header.NumChannels := 1; Header.SampleRate := 22050; Header.BitsPerSample := BytsPerSample * 8; Header.BlockAlign := Header.NumChannels * BytsPerSample; Header.ByteRate := Header.SampleRate * Header.BlockAlign; Header.Subchunk2ID := 'data'; Header.Subchunk2Size := NumSamples * Header.BlockAlign; Header.ChunkSize := Header.Subchunk2Size + SizeOf(Header) - 8; fs := TFileStream.Create('New File.wav',fmCreate); try fs.WriteBuffer(Header, SizeOf(Header)); for I := 1 to NumSamples do begin for J := 1 to Header.NumChannels do begin Sample := 1111; fs.WriteBuffer(Sample, BytsPerSample); end; end; finally fs.Free; end; end; procedure TForm1.Button4Click(Sender: TObject); begin if SaveDialog2.Execute then begin WriteWav(SaveDialog2.FileName); end; end; Код:
Header.ChunkID := 'RIFF' Header.Format := 'WAVE'; Header.Subchunk1ID := 'fmt '; Header.Subchunk1Size := 16; Header.AudioFormat := $0001; Header.NumChannels := 1; Header.SampleRate := 22050; Header.BitsPerSample := BytsPerSample * 8; Header.BlockAlign := Header.NumChannels * BytsPerSample; Header.ByteRate := Header.SampleRate * Header.BlockAlign; Header.Subchunk2ID := 'data'; Header.Subchunk2Size := NumSamples * Header.BlockAlign; Header.ChunkSize := Header.Subchunk2Size + SizeOf(Header) - 8; Наверное надо сделать как то так: Код:
Header.ChunkID := ReadString.Memo2('RIFF'); |
#57
|
||||
|
||||
Цитата:
Цитата:
Код:
Header.ChunkID := Memo2.Lines[X]; |
#58
|
|||
|
|||
Цитата:
Код:
Header.ChunkID := Memo2.Lines[X]; Так не получается... Вот такое выдает: |
#59
|
||||
|
||||
Цитата:
|
#60
|
|||
|
|||
Цитата:
Код:
Header.ChunkSize := StrToInt(Form1.Memo2.Lines[2]); Последний раз редактировалось Dmitry_DM, 14.08.2012 в 15:12. |