Перейти к содержимому

Фотография

как найти ошибку в коде? Visual Studio 6.0библиотека для работы со звуком


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1
SeregaZ

SeregaZ
  • В доску свой
  • 1 316 сообщений

есть исходники библиотеки OPN.dll - она эмулирует звуковой чип YM2612, который устанавливался в приставку Sega Mega Drive. использую для организации проигрывания музыки в редакторе для одной игры. все-бы ничего, да только в ней есть два недочета.

 

1. проигрывание сэмплов - используется PlayDACSample - но если в начале сэмпла была тишина на секунду или две, то тогда процедура теряет интерес к сэмплу и не играет его. даже если потом уже пошли данные. или наоборот - в середине сэмпла скажем тишина на секунду или две - она начало проиграет и все на этом. насколько я понял это отключение нужно было в целях экономии ресурсов и происходило приостанавливание стрима. заккоментировал эти строки в функции FillBuffer

        //if (NullSamples >= SampleRate)
	//{
		//NullSamples = 0xFFFFFFFF;
		//PauseStream(true);	// stop the stream if chip isn't used
	//}

вроде бы запело. хотя теперь видимо приостановки трансляции тишины не происходит. видимо теперь программа будет проигрывать тишину от момента запуска до закрытия. но вроде загрузки процессора в диспетчере задач нет. как было 0, так и осталось.

 

2. вроде бы библиотека имеет возможность использовать 2 чипа и даже более. мне бы как раз хотелось использовать 2 штуки. "создаю" путем использования функции: OpenOPNDriver(2) - однако создается впечатление, что вместо создания второго чипа происходит увеличение частоты работы первого. звук становится намного выше по тону. не силен я в этом Visual Studio 6.0, и сам язык программирования не мой - как баран на новые ворота смотрю. где этот момент можно поправить? смотрел на функции в библиотеке - есть некая SetOPNOptions - вобще я её не использую, но тут ради эксперимента решил воспользоваться и выяснилось что если указать в ней SetOPNOptions(44100, 0, 0, 0) - это видимо настройки по умолчанию. OpenOPNDriver(1) - играет нормально. OpenOPNDriver(2) - играет с тем завышением. а вот если указать SetOPNOptions(88200, 0, 0, 0), то OpenOPNDriver(2) вроде бы начинает играть как надо, но вроде бы громче, а самое печальное происходит вылет программы. что-то там с памятью. вот где может быть ошибка? хочется уж до ума довести эту часть. а то сейчас проигрываю всего 6 каналов, но там треков может быть до 16 штук по моему. то есть некое динамическое распределение каналов там есть, когда в 6 физических распихивают эти 16 в реальном времени по приоритету и занятости канала. я такое перераспределение не рожу... сложновато. но я мог бы, используя второй чип, играть на 12 каналах - каждая дорожка в своем канале. зная что песня уже была подготовлена для игры на 6 каналах - то играя на 12 звук будет как на 6. сейчас же я просто выкидываю все что после 6 канала идет. мелодия теряет несколько в качестве.

 

скачать: http://www.emu-land....0;attach=185238

в архиве два ехе файла, которые загружают эту библиотеку и проигрывают звуки. первый эталонный одночиповый, второй двух чиповый, с демонстрацией того завышения. в первом еще сэмпл играет - первый с начала данные идут. второй с тишиной в начале. но с сэмплами не так актуально, так как вроде бы это поправил... хоть и в ущерб производительности наверное. мне бы вторую проблему с этим вторым чипом решить.


  • 0

#2
lexx821

lexx821
  • Свой человек
  • 816 сообщений

А почему-бы просто не использовать такие бесплатные трекеры как DefleMask (эмулирует все чипы) или Famitracker (нинтендо)? У этих трекеров есть возможность сохранить в wav формат, а потом спомощью того-же Visual C++ написать программы, просто вызвать спомощью функции sndPlaySound или mciSendString эти музыкальные файлы в формате wav или даже mp3. Можно так-же использовать OpenMPT это бесплатный mod трекер, только нужно найти аудио сэмплы чипа YM2612. 


  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.