Вы не можете возиться с argv
, как это. argv
не ваше, оно было выделено и заполнено при запуске программы в соответствии с командной строкой.
Если вы вызываете свою программу следующим образом:
program a b c
, тогда argc
равно 4, argv[0]
указывает на "program"
, argv[1]
указывает на "a"
и т. Д.
argv[argc]
- это NULL
Но доступ к argv[5]
и далее является неопределенным поведением, потому что вы получаете доступ к массиву вне границ.
Эта статья SO тоже может помочь: Насколько опасен доступ к массиву за пределами? .
Чтобы решить вашу проблему: не обращайтесь к массивам за пределами.
Волновые файлы являются самым простым звуковым форматом. У них есть заголовок (который может иногда быть сложным, но обычно не является), и затем фактические звуковые данные являются сырыми данными, распаковал PCM. Поскольку они являются несжатыми, тем не менее, они становятся очень крупными очень быстро даже для умеренно долгих звуков.
Изучите libsndfile http://www.mega-nerd.com/libsndfile/
WAV является способом пойти, хотя быть осторожным - формат файла WAV может на самом деле хранить сжатые данные - хотя это обычно не делает.
Я использую Смелость недавно для импорта необработанных звуковых данных из системы микроконтроллера. Это может также экспортировать необработанное аудио.
Тем путем можно запустить со звука почти в любом формате и экспортировать его как двоичный файл согласно требованию. Я использую подписанных 16 битов, прямой порядок байтов, моно звук, например. Очень удобный и очень легкий управлять в простых тестовых программах. Может, вероятно, даже десериализовать его на некоторых языках программирования в массив или вектор.
- Adam