|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||
Как грамотно соединить структуру с массивом?14.05.2020, 22:07. Показов 6316. Ответов 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 | |
|
Как создать структуру, где будут поля с указателями на эту же структуру? Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. как грамотно форматировать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|