Страница: 1 |
Вопрос: ЗвуГ | Добавлено: 20.11.07 12:26 |
Автор вопроса: ![]() |
Я где-то видел функцию, преобразовывающую звуковой файл в массив чисел, которые потом можно изменить и вновь воспроизвести. Тобишь можно написать редактор звука. Кто нибудь знает, что это за функция?
Заранее благодарен. |
Ответы | Всего ответов: 11 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ICQ: 445091742 Вопросов: 4 Ответов: 169 |
Профиль | Цитата | #1 | Добавлено: 20.11.07 12:41 |
там и функции не надо читаеш бинарно вав и пишеш данные в масив байтов( почитай справочник Климова ) но там надо знать некоторье методы обработки звука |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 246 Ответов: 3333 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 20.11.07 15:03 |
Я об этом и говорю |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ICQ: 445091742 Вопросов: 4 Ответов: 169 |
Профиль | Цитата | #3 | Добавлено: 20.11.07 17:20 |
WAV файл - это звуковой файл формата RIFF. Он состоит из трёх заголовков, за которыми следуют данные самого звукового файла, т.е. последовательность байт самого звукового сигнала. Разберём все три заголовка подробнее:
Первый - RIFF заголовок. Он занимает 8 байт с самого начала файла и содержит следующую информацию (для удобства всё описано в структуре данных Visual Basic'а): Type RIFF_HEAD riffFmt As String * 4 ' Четыре буквы "RIFF" lenOfFileData As Long ' длина файла без этого заголовка, ' т.е. FileLen(Wav) - 8 End Type Второй заголовок - WAV заголовок. Вот его структура: Type WAVE_HEAD waveFmt As String * 8 ' 8 букв - "WAVEfmt " lenOfThunk As Long ' размер этого куска (16 байт) format As Integer ' формат WAV файла (обычно всегда 1) channels As Integer ' кол-во каналов (1 - моно, 2 - стерео) samplesPerSecond As Long ' зазрешение WAV файла, ' т.е. кол-во Samples'ов в сек (11025,22050,44100 и т.д.) avgBytesPerSecond As Long ' тоже самое blockAlign As Integer ' выравнивание блоков данных (обычно 1) bitsPerSample As Integer ' Кол-во Битов на один сэмпл (8/16) End Type Ну и наконец третий, заголовок данных: Type DATA_HEAD datastr As String * 4 ' 4 буквы "data" lenOfThunk As Long ' кол-во байт, ' отводящихся под сами WAV данные End Type Ну вот и всё, далее идут сами данные звукового файла. Если файл 2-х канальный, то данные идут по очереди, 1 канал, 2-ой, 1-ый, 2-ой... и т.д. Необходимо также помнить, что если файл 8 битный, то под каждый сэмпл отводится по одному байту, если же 16 битный - то по 2 байта. В конце файла иногда бывает некоторая дополнительная информация о WAV файле (имя Автора и т.д.), которую позволяют вносить программы типа Sound Forge. Ну вот и всё. Можете делать со звуковыми файлами различные чудеса! Для удобства можете использовать мой модуль для работы с WAV файлами. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 246 Ответов: 3333 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 20.11.07 19:33 |
Посибо огромное!
Для удобства можете использовать мой модуль для работы с WAV файлами.
ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ PLS PLS PLS PLS PLS PLS PLS PLS PLS demon@kpost.ru ![]() |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #5 | Добавлено: 21.11.07 01:26 |
ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ ДАЙ То так при комунизме кричали, а щас только ПРОДАЙ...
|
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 246 Ответов: 3333 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 21.11.07 13:07 |
intel-DX лучше знает! |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ICQ: 445091742 Вопросов: 4 Ответов: 169 |
Профиль | Цитата | #7 | Добавлено: 21.11.07 19:39 |
Это давно уже есть
Attribute VB_Name = "WaveFunctions" Option Explicit '=============================== 'Модуль для работы с wav файлами 'Автор - Волков Антон 'Скачен с сайта vb.hut.ru '=============================== ' =================================================================================================== Enum LEN_FORMAT frmSeconds = 0 frmSamples = 1 End Enum Type RIFF_HEAD riffFmt As String * 4 lenOfFileData As Long End Type Type WAVE_HEAD waveFmt As String * 8 lenOfThunk As Long format As Integer channels As Integer samplesPerSecond As Long avgBytesPerSecond As Long blockAlign As Integer bitsPerSample As Integer End Type Type DATA_HEAD dataStr As String * 4 lenOfThunk As Long End Type ' =================================================================================================== ' Функция возвращает массив данных из WAV файла Public Function ReadWaveData(ByVal fileName As String, Optional howMany As Long) As Variant On Error GoTo ERRH Dim freeNum As Long Dim size As Long Dim bits As Byte freeNum = FreeFile Open fileName For Binary As #freeNum Get #freeNum, 41, size Get #freeNum, 35, bits If bits = 8 Then Dim arrByte() As Byte Else Dim arrInteger() As Integer End If If howMany < 0 Then If bits = 8 Then ReDim arrByte(size - 1) Else ReDim arrInteger(Int(size / 2) - 1) End If Else If howMany > size Or howMany = 0 Then howMany = size If bits = 8 Then ReDim arrByte(howMany - 1) Else ReDim arrInteger(howMany - 1) End If End If If bits = 8 Then Get #freeNum, 45, arrByte Else Get #freeNum, 45, arrInteger End If Close #freeNum If bits = 8 Then ReadWaveData = arrByte Else ReadWaveData = arrInteger End If Exit Function ERRH: ReadWaveData = False End Function ' =================================================================================================== ' Читает заголовок WAV файла Public Function ReadWaveHeader(ByVal fileName As String, ByRef riffHead As RIFF_HEAD, ByRef waveHead As WAVE_HEAD, ByRef dataHead As DATA_HEAD) As Boolean On Error GoTo ERRH Dim freeNum As Long freeNum = FreeFile Open fileName For Binary As #freeNum Get #freeNum, , riffHead Get #freeNum, , waveHead Get #freeNum, , dataHead Close #freeNum ReadWaveHeader = True Exit Function ERRH: ReadWaveHeader = False End Function ' =================================================================================================== ' Переписать заголовок WAV файла Public Function WriteNewWaveHeader(ByVal fileName As String, ByRef riffHead As RIFF_HEAD, ByRef waveHead As WAVE_HEAD, ByRef dataHead As DATA_HEAD) As Boolean On Error GoTo ERRH Dim freeNum As Long freeNum = FreeFile Open fileName For Binary As #freeNum Put #freeNum, , riffHead Put #freeNum, , waveHead Put #freeNum, , dataHead Close #freeNum WriteNewWaveHeader = True Exit Function ERRH: WriteNewWaveHeader = False End Function ' =================================================================================================== ' Создать WAV файл Public Function CreateWaveFile(ByVal fileName As String, ByRef waveHead As WAVE_HEAD, ByVal waveData As Variant) As Boolean On Error GoTo ERRH Dim riffHead As RIFF_HEAD Dim dataHead As DATA_HEAD Dim freeNum As Long Dim arrBound As Long Dim arrToPut() As Byte freeNum = FreeFile arrBound = UBound(waveData) Open fileName For Binary As #freeNum riffHead.riffFmt = "RIFF" riffHead.lenOfFileData = arrBound + 37 Put #freeNum, , riffHead waveHead.lenOfThunk = 16 waveHead.waveFmt = "WAVEfmt " Put #freeNum, , waveHead dataHead.lenOfThunk = arrBound + 1 dataHead.dataStr = "data" Put #freeNum, , dataHead ReDim arrToPut(arrBound) arrToPut = waveData Put #freeNum, , arrToPut Close #freeNum CreateWaveFile = True Exit Function ERRH: CreateWaveFile = False End Function ' =================================================================================================== ' Получить длину WAV файла (в сек. или в сэмплах) Public Function GetLenOfWaveFile(ByVal fileName As String, format As LEN_FORMAT) As Single Dim riffHead As RIFF_HEAD Dim waveHead As WAVE_HEAD Dim dataHead As DATA_HEAD ReadWaveHeader fileName, riffHead, waveHead, dataHead If format = frmSeconds Then GetLenOfWaveFile = (dataHead.lenOfThunk / waveHead.samplesPerSecond) Else GetLenOfWaveFile = dataHead.lenOfThunk End If End Function |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #8 | Добавлено: 24.11.07 14:50 |
VBD не ожидал от тебя такой вопрос.
Постучи в аську. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 246 Ответов: 3333 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 24.11.07 18:22 |
Аськи нету, я ее УБИЛАПСТЕНУ |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #10 | Добавлено: 24.11.07 20:22 |
гыгы лузер |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 326066673 Вопросов: 368 Ответов: 5968 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 24.11.07 20:37 |
Прекратить безобразие.
|
Страница: 1 |
|