|
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
|
||||||
Как грамотно соединить структуру с массивом?14.05.2020, 22:07. Показов 6155. Ответов 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 и возвращает новую, исправленную структуру?.. как грамотно форматировать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|