|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||
Как грамотно соединить структуру с массивом?14.05.2020, 22:07. Показов 5875. Ответов 75
Метки нет (Все метки)
Всем здравствуйте!
Дано: 1. структура UDT 2. массив Требуется соединить их вместе в одном массиве (типа Byte) так, чтобы новый массив начинался с членов данной структуры и продолжался/завершался членами данного массива. Для примера выбраны очень простенькие/маленькие структура и массив, но на самом деле они могут быть очень большими. И ещё условие задачи такое - циклами пользоваться нельзя, а то эдак я и сам могу тренькать, как сказал бы классик ![]()
0
|
||||||
| 14.05.2020, 22:07 | |
|
Ответы с готовыми решениями:
75
как грамотно соединить в локальную сеть 5 ПК и 3 пятиэтажных дома Как грамотно электрически и безопасно соединить ПК и ТВ кабелем HDMI-HDMI? Стек соединить с массивом |
| 22.05.2020, 17:07 [ТС] | ||||||||||||||||
|
Не по теме:
А если вы под "результатом" имели в виду значение dwrd_MMRESULT, которое вернула эта функция, то оно, как и полагается, равно нулю ("успешное завершение").
Структуры-то я худо-бедно уже заполнил и даже "необязательную" функцию acmFormatSuggest уже вполне успешно вызвал. Следующий пункт в моей дорожной карте это функция acmStreamOpen:
0
|
||||||||||||||||
|
Модератор
|
||
| 22.05.2020, 21:34 | ||
|
GoldWave: VirtualDub: Так вот acmFormatEnum позволяет определить для определенного входного формата список форматов в который можно сконвертировать этот формат. В итоге получишь уже заполненные структуры MPEGLAYER3WAVEFORMAT и их текстовое описание.
1
|
||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|||
| 22.05.2020, 23:48 [ТС] | |||
|
0
|
|||
| 23.05.2020, 23:30 [ТС] | ||
|
Не по теме:
Прошёл уже весь путь до закрытия ACM потока. В результате пока General Protection Fault, но это нормально, потому что у меня по ходу дела возникали некоторые вопросы, но я их оставлял без ответа и действовал по своим догадкам. Собственно, главный вопрос, который сейчас меня очень сильно интересует, таков: Там по ходу дела просят дать ссылки на буферы источника и назначения. Ну с назначением всё более или менее понятно, - это просто какое-то новое место в памяти. А вот с буфером источника не понятно: то ли тоже надо указывать какое-то новое место в памяти, то ли надо указывать на массиив байтов нашего "сырого" аудиопотока? Я указал на массиив байтов нашего "сырого" аудиопотока, но что-то мне подсказывает, что всё-таки буфер должен быть в каком-то отдельном месте, а не на "промежуточном продукте". Но тогда получается, что функцию acmStreamSize следует вызывать дважды, сначала с флагом ACM_STREAMSIZEF_SOURCE, а потом с флагом ACM_STREAMSIZEF_DESTINATION, или всё-таки только один раз? Собственно, сейчас это мой главный камень преткновения.
0
|
||
| 24.05.2020, 13:44 | |||
|
Не по теме:
\ash\pbSrc это исходный буфер.
0
|
|||
| 25.05.2020, 03:52 [ТС] | |
|
Не по теме: locm, ну вот сейчас удалось сконвертировать. Результат всех функций вернул ноль (успешное завершение).
0
|
|
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
|
| 25.05.2020, 03:54 [ТС] | |
|
Как я понял, вложения отказываются прикрепляться к оффтопным постам, печаль
0
|
|
| 26.05.2020, 00:45 [ТС] | |||||
|
Не по теме:
Поскольку ничего у меня с кавалерийского наскока не получилось, приходится волей-неволей засесть за изучение теории :) И вот, что я только что вычитал:
Прав, The trick, как выясняется. Без этого шага всё-таки не обойтись:
Мою надежду подпитывало ещё и то, что в функции acmStreamOpen параметр had имеет вот такое описание:
Но она, увы, подвела :) Придётся начинать всё с самого начала и уже "вручную" :)
0
|
|||||
|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||||
| 26.05.2020, 23:03 [ТС] | ||||||||
|
Не по теме:
На одной чаше весов описание полного алгоритма действий, а на другой только одного (пусть даже и очень важного) этапа. Ну и что выбрать? Разумеется, выбираем полный алгоритм, проходим быстренько весь путь от начала до конца, а потом, уже ознакомившись на практике с самыми важными вехами, и в том случае, если получен неудовлетворительный результат, возвращаемся назад и ищем ошибку. Хотя, с другой стороны, вы, конечно, даже ссылку дали на код, который делает всю работу по конвертации от начала до конца. И более того, этот код написан на близком и родном мне Визуальном Бейсике. Но всё-таки чужие программы я понимаю с трудом, даже когда они написаны на понятных мне языках, это раз. Ну а во-вторых, не пройдя весь путь от начала до конца, я вообще не понимал, что мы там делаем :) Ну вот теперь вернусь и буду разбираться уже с учётом накопленного опыта :) Проблема же ещё и в том, что я по жизни совсем не меломан, и для меня все эти битрейты, семплы и всё такое это вообще нечто совершенно мне не нужное и чужеродное :) Ну просто сейчас вот возникла потребность озвучить текст, ну вот и приходится нырять во всю эту "музыку" :) И это как раз тот случай, когда хочется сделать поскорее, "на троечку", не особо вникая в интимные подробности :) Ну не получилось, придётся вникать :) Хотя в этом, конечно же, тоже есть своя неоспоримая польза. Добавлено через 5 часов 30 минут Не по теме:
Ну просто тупо скопировал отсюда все значения в обе структуры и пазл неожиданно сложился :) Почему так, совершенно не понимаю. Каким-то непонятным образом у нас здесь BitsPerSample в структуре MPEGLAYER3WAVEFORMAT раен нулю, хотя в структуре WAVEFORMATEX он же равен 16-ти. Да и кроме того некоторые вроде бы очень важные члены структуры MPEGLAYER3WAVEFORMAT вообще оставлены безо всякого внимания. Я сейчас говорю про fdwFlags, nFramesPerBlock, nBlockSize и nCodecDelay. А ведь я их так старательно заполнял :) А теперь вот закомментировал и всё заработало, чудеса :) Но всё-таки для моих чисто речевых нужд такие характеристики звука явно "жирноваты". У меня даже в самом названии речевого движка фигурирует цифра 22kHz, а здесь 44kHz.
Разумеется, попробовал подставить "свои" параметры, оставив всё остальное без изменений. Не работает :( Ну да и ладно. В конце концов, MP3 файл сжат очень хорошо (относительно исходого WAV), а именно в 11,5 раз. Ну и короче говоря, меня вполне устраивает достигнутый результат. locm и The trick, огромное спасибо за помощь!!!
0
|
||||||||
| 27.05.2020, 00:46 | |
|
0
|
|
| 27.05.2020, 02:48 [ТС] | |||
|
Не по теме:
Я немного поэкспериментировал с вашими данными. Как я уже говорил выше, без использования функции acmFormatSuggest всё работает замечательно (с вашими данными для структуры MPEGLAYER3WAVEFORMAT). А вот как изменяет эта функция эти данные, после чего сжатие аудиопотока уже не происходит(и причём сама функция сигнализирует нулём об успешном завершении операции):
0
|
|||
| 27.05.2020, 21:41 [ТС] | |||||||
|
Не по теме: The trick и locm, будете смеяться, но я всё сделал методом подбора :)
Чтобы "нащупать" разнообразные допустимые комбинации, сначала отталкивался от тех параметров, которые предложил locm (назовём их "статическими"). Напомню, что там было стерео 44кГЦ, 16 бит. Потом стал постепенно вводить свои статические параметры, продолжая играть динамическими. Сначала изменил моно на стерео, потом 44кГЦ на 22кГЦ. И каждый раз находилось несколько возможных значений динамических параметров, при которых поток нормально запускался. Критичным оказался только статический параметр WAVEFORMATEX.wBitsPerSample = 16. При любых попытках изменить его на восьмёрку, никакие динамические комбинации уже не срабатывали. Ну и решил на этом остановиться :) Выводы: (напомню, что каждый раз озвучивалась одна и та же фраза "Всем привет!") 1. В первом варианте (стерео 44кГЦ, 16 бит) размер WAV-файла составил 326280 байт, а MP3-файла 28421 байт (сжатие приблизительно в 11,5 раз). Во втором варианте (моно 22кГЦ, 16 бит) размер WAV-файла составил 81594 байт, а MP3-файла 5172 байт (сжатие приблизительно в 17,5 раз). 2. А вот это самый удивительный (ну по крайней мере, для меня) вывод: Из всех полей структуры MPEGLAYER3WAVEFORMAT заполнить достаточно только вот эти:
0
|
|||||||
| 27.05.2020, 22:21 | |
|
Не по теме: На размер файла сильно влияет битрейт. Попробуйте при 22КГц и 16 бит найти минимальное значение битрейта (поле nAvgBytesPerSec в MPEGLAYER3WAVEFORMAT). Насколько помню минимум 16000/8 т. е. 2000.
0
|
|
| 27.05.2020, 23:44 [ТС] | |||||||
|
Не по теме:
У меня как раз и выбрано минимальное значение. Но, конечно, такой "партизанский" подход, как я понимаю, годится только для тех, кто пишет программы исключительно для своего домашнего использования, ну как я например. А иначе у конечного пользователя может не оказаться нужного драйвера/кодека и программа уже не справится с конвертацией.
0
|
|||||||
| 27.05.2020, 23:44 | |
|
Помогаю со студенческими работами здесь
76
Как создать структуру, где будут поля с указателями на эту же структуру? Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. как грамотно форматировать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|