Вот новый компонент - для создания заголовка и для его чтения. Примеры прилагаются. Думаю, компонент полезный, и скоро в HiAsm можно будет сделать звуковой редактор наподобие Nero Wave Editor.
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
|
|||
карма: 9 |
| ||
файлы: 1 | waveheader.rar [2.6KB] [443] | ||
Голосовали: | LainX |
Ответов: 1161
Рейтинг: 160
|
|||
Помню, тоже самое делал, только при помощи компонентов. Даже некий редактор звуков получился
|
|||
карма: 0 |
|
Ответов: 1926
Рейтинг: 172
|
|||
При помощи стандартных компонентов можно делать, конечно, но структура WAV стандартная, поэтому всё-таки хотелось упростить её создание.
------------ Дoбавленo в 22.26: Сейчас попробовал в своей же схеме чтения заголовка(она в архиве) выбрать в программе несколько файлов - иногда выдаёт runtime error. Знающие люди, посмотрите, пожалуйта, что в коде компонента проводит к ошибке? |
|||
карма: 9 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
3042 писал(а): что в коде компонента проводит к ошибке?Скорее всего, вот это:
Ты создаешь экземпляр PStrem, а удалять его кто будет В таком случае, лучше всего добавить секции Constructor и Destructor
|
|||
карма: 22 |
|
Ответов: 1926
Рейтинг: 172
|
|||
nesco, я говорил про код чтения, т.е. doGet. С doCreate всё в порядке.
|
|||
карма: 9 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
3042 писал(а): С doCreate всё в порядкеНе в порядке, я показал тебе неправильность построения динамического класса, которое приводит к утечке памяти, и не очень маленькой, учитывая размер стрима ------------ Дoбавленo в 08.36: Вот смотри, мне это совсем непонятно
Первая ошибка -- нельзя уничтожать чужой стрим, ты его не получаешь сам, а получаешь только указатель на него, те, нельзя, ни в коем случае, делать FWavHeader.Free в этом методе. И для этго лучше оформить другую глобальную переменную класса, так как дальше ты ее зачем-то пересоздаешь, да еще и не очищая. Кстати, а как твоя структура WaveHdr попадет в wav-файл, судя по коду -- никак, так как ты ее пишишь в пустую память, вновь созданного стрима, а не в уже уничтоженный тобой поток самого файла. К тому же, как после уничтожения стрима, ты его читать собрался вот здесь
Мое мнение, код очень сырой и требует кардинальной доработки |
|||
карма: 22 |
| ||
Голосовали: | 3042 |
Ответов: 1926
Рейтинг: 172
|
|||
Хорошо, nesco, я исправил. Но проблему с doGet это не решило. Посмотри, в архиве project6.sha. Вот там проблема. Если выбрать один файл, после его чтения второй и затем третий, то выдаёт runtime err
|
|||
карма: 9 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
3042, внимательно пересмотри еще раз код и алгоритм чтения, на работу надо бежать. Если будет время, то там и посмотрю
|
|||
карма: 22 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 8 раз(а), последний 2021-06-21 04:24:07 |
|||
карма: 0 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 8 раз(а), последний 2021-06-21 04:24:04 |
|||
карма: 0 |
|
Ответов: 1926
Рейтинг: 172
|
|||
вот. Выше это был я.
|
|||
карма: 9 |
| ||
файлы: 1 | waveheader011.rar [2.7KB] [353] |
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
38.10.204.89.access.ttkne писал(а): Никак. Стуктура пишется в stream и выдаётся на varWavHeader. А дальше нужно записывать её через стандартные компоненты. В архиве есть схемаА че так, сложно, что ли, затолкать запись в компонент, и нафига такой стрим, как переменная, более актуально, использовать именно чтение параметров самого wav-файла Хотя, смотри сам, ты автор этого компонента |
|||
карма: 22 |
|
Ответов: 1926
Рейтинг: 172
|
|||
nesco, этот компонент для работы именно с заголовком файла, а не с файлом. А если заталкивать туда запись, то это уже работа с файлом. Это упростит понимание структуры wav-файлов, особенно для новичков. А если запихивать и данные, и заголовок в один компонент, то наглядность уменьшится.
|
|||
карма: 9 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
3042 писал(а): А если запихивать и данные, и заголовок в один компонентА я разве что-то говорил про данные, я имел в виду полную редакцию заголовка, включая, и чтение, и запись в файл |
|||
карма: 22 |
|
Ответов: 1926
Рейтинг: 172
|
|||
nesco писал(а): затолкать запись в компонентЯ подумал, что это про звуковые данные. Пожалуй, ты прав, nesco. Я сделал в компоненте запись в файл и чтение из файла, и количество точек уменьшилось. Вот. Интересно, в палитре такой компонент не помешает? |
|||
карма: 9 |
| ||
файлы: 1 | waveheader20.rar [2.7KB] [376] |