Документация по Infinity

Drivers for sound cards
  • Спасибо! Попробую, если потоковый не справится.
  • Mario! Если не секрет, что Вы задумали ?

    Каюс - невнимательно читал :( :

    Цитата:"для воспроизведения отдельных семплов-букв (в синтезаторе речи) "
  • Я же маргинал и злодей, потому задумал очередное черное дело.
  • Вот это я понимаю !.. :mrgreen:
  • Обновил документацию на вики http://wiki.kolibrios.org/wiki/Sound/ru
  • Это был долгий вечер...

    Следствием установлено:
    1) В режиме PCM_RING нельзя инициализировать звуковую подсистему в одном потоке и вызывать воспроизведение в другом, даже если они в одном адресном пространстве и один является родителем для другого - ф.68.14 будет ждать очень долго...
    Spoiler:Image
    2) В режиме PCM_RING не корректно воспроизводятся сэмплы с частотой ниже 44100, т.е. 22050 и ниже. Особенно сильно проявляется на 8 бит и 1 канал.
    Spoiler:Image
    В режиме PCM_OUT такого сроду не было...
    Spoiler:Image
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4
    1. Это и к остальным типам относится. Буфер привязан к контексту потока. Использование в другом контексте не рекомендуется.
    2.В Doom 11КГц стерео 16 бит выводится корректно. Скорее всего ты неправильно создаёшь буфер. Надо сразу указывать формат звука.
  • Serge wrote:2.В Doom 11КГц стерео 16 бит выводится корректно. Скорее всего ты неправильно создаёшь буфер. Надо сразу указывать формат звука.
    Зато 8 КГц моно выводится "трелью".

    Укажи пожалуйста где я создаю неправильно буфер:
    Spoiler:

    Code: Select all

    snd_background_music_thread_start:
    	mov	eax,[background_music]
    	mov	[wav_for_test],eax
    	mov	ebx,eax
    	add	ebx,1024
    	mov	[wav_for_test_end],ebx
    	call	initialize_sound_system
    ;--------------------------------------
    .1:
    	cmp	[music_flag],1
    	je	.start
    	
    	mcall	5,50
    	mcall	68,1
    	jmp	snd_background_music_thread_start.1
    ;--------------------------------------		
    .start:
    	stdcall _PlayBuffer@8, [hBuff1], 0
    	cmp	eax,-1
    	je	snd_play_buffer_fail
    	
    ;	DEBUGF	1, "Play Buffer successful EAX: %x\n",eax
    ;--------------------------------------		
    .start_1:
    	mov	eax,[background_music]
    ; check for correct data_offset
    	push	eax
    	add	eax,[data_offset]	
    	sub	eax,4
    	cmp	[eax],dword 'data'
    	pop	eax
    	je	@f
    
    	mov	[wav_for_test],eax
    	mov	ebx,eax
    	add	ebx,1024
    	mov	[wav_for_test_end],ebx
    	call	find_data_offset
    	cmp	[sound_flag],0
    	jz	snd_background_music_thread_start.1	;.exit
    ;--------------------------------------
    @@:
    	add	eax,[data_offset]
    	mov	ebx,[eax]
    	add	eax,4
    	mov	ebp,eax
    	add	ebx,eax
    ;	DEBUGF	1, "start EAX: %x\n",eax
    ;--------------------------------------
    .loop:	
    	cmp	[music_flag],0
    	jne	@f
    
    	stdcall _StopBuffer@4, [hBuff1]
    ;	DEBUGF	1, "Stop Buffer EAX: %x\n",eax
    	jmp	snd_background_music_thread_start.1
    ;--------------------------------------
    @@:
    ; get event data from the driver
    ;	DEBUGF	1, "Get driver_notify_struct \n"
    	push	ebx
    	mcall	68,14,hBuff1_driver_notify_struct
    	pop	ebx
    ;	DEBUGF	1, "Check to code \n"	
    ; проверка на code
    	cmp	[hBuff1_driver_notify_struct], dword 0xFF000001
    	jne 	@b
    ;	DEBUGF	1, "Check to stream \n"	
    ; проверка на stream
    	mov	eax,[hBuff1_driver_notify_struct+8]
    	cmp	eax,[hBuff1]
    	jne	@b
    ;	DEBUGF	1, "Get buffer_offset \n"
    ; получить смещение в буффере
    	mov	eax,[hBuff1_driver_notify_struct+12]
    	mov	[hBuff1_buffer_offset],eax
    
    ;	DEBUGF	1, "src EBP: %x size EBX: %x\n",ebp,ebx
    	stdcall _SetBuffer@16, [hBuff1], ebp, [hBuff1_buffer_offset], [hBuff1_buffer_size]	
    	cmp	eax,-1
    	je	snd_set_buffer_fail
    	
    ;	DEBUGF	1, "Set Buffer successful EAX: %x\n",eax
    	
    ;	add	ebp,8192*2
    	add	ebp,[hBuff1_buffer_size]
    	add	ebp,[hBuff1_buffer_size]
    	cmp	ebx,ebp
    	jbe	.start_1
    	
    ;	sub	ebp,8192
    	sub	ebp,[hBuff1_buffer_size]
    	jmp	.loop
    ;------------------------------------------------------------------------------
    initialize_sound_system:
    	mov	[sound_flag],1
    
    	stdcall	_InitSound@4,version
    	cmp	eax,-1
    	je	snd_init_fail
    	
    ;	DEBUGF	1, "Sound init successful %x\n",eax
    	mov	eax,[version]
    	and	eax,0xffff
    	cmp	eax,SOUND_VERSION
    	jne	snd_version_fail
    
    ;	DEBUGF	1, "Sound version successful %x\n",eax
    
    	stdcall	_test_wav@4,dword [wav_for_test]	;letter_1a
    	test	eax,eax
    	jz	snd_test_wav_fail
    	
    ;	or	eax,PCM_OUT
    	or	eax,PCM_RING
    	mov	[snd_format],eax
    
    ;	DEBUGF	1, "Test wav successful %x\n",eax
    
    	call	find_data_offset
    	
    	mov	al,[sound_flag]
    	test	al,al
    	jz	.exit
    ;--------------------------------------	
    	stdcall	_CreateBuffer@12,[snd_format],0,hBuff1
    	cmp	eax,-1
    	je	snd_create_buffer_fail
    	
    ;	DEBUGF	1, "Create Buffer 1 successful %x\n",eax
    
    	stdcall	_GetBufferSize@8,[hBuff1],hBuff1_buffer_size
    	
    	cmp	eax,-1
    	je	snd_get_buffer_size_fail
    	
    ;	DEBUGF	1, "Get Buffer 1 size successful size: %x\n",[hBuff1_buffer_size]
    	
    	mov	ecx,[hBuff1_buffer_size]
    	shr	ecx,1
    	mov	[hBuff1_buffer_size],ecx
    ;--------------------------------------
    .exit:
    	ret
    ;------------------------------------------------------------------------------
    find_data_offset:
    	mov	esi,[wav_for_test]
    ;--------------------------------------
    @@:
    	cmp	[esi],dword 'data'
    	je	@f
    
    	inc	esi
    	cmp	esi,[wav_for_test_end]
    	jne	@b
    	
    ;	DEBUGF	1, "find data offset fail\n"
    	mov	[sound_flag],0
    	ret
    ;--------------------------------------
    @@:
    	sub	esi,[wav_for_test]
    	add	esi,4
    	mov	[data_offset],esi
    	ret
    ;------------------------------------------------------------------------------
    
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • На первый взгляд всё правильно. Одну ошибку в драйвере я исправил. Страдали 8-ми битные моно с частотой меньше 24КГц и 8-ми битные стерео с частотой меньше 12 КГц.
  • Ну, вот. Помнится FPLAY тоже был идеален, пока не был исправлен. :wink:
    Спасибо за оперативный фикс.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: No registered users and 1 guest