当前位置: 首页>>代码示例>>C++>>正文


C++ MainFrame::GetBytePerSampleSize方法代码示例

本文整理汇总了C++中MainFrame::GetBytePerSampleSize方法的典型用法代码示例。如果您正苦于以下问题:C++ MainFrame::GetBytePerSampleSize方法的具体用法?C++ MainFrame::GetBytePerSampleSize怎么用?C++ MainFrame::GetBytePerSampleSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在MainFrame的用法示例。


在下文中一共展示了MainFrame::GetBytePerSampleSize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: prepare_next

// 다음 10개의 pcm 데이타를 준비한다.
void prepare_next (void *userdata, int len, int bufferIndex)
{
	if ( m_playMode == STOP || m_playMode == STOPPED ||
	  m_playMode == SONG_END ) return;

	MainFrame *self = (MainFrame *)userdata;

	Ims *m_ims = self->m_thread->GetIms();
	Iss *m_iss = self->m_thread->GetIss();

	for(int i=0; i<PREPARE_BUFFER_COUNT; i++)
	{
		static int remain_samples = 0;
		int to_write_len, samples;
		int delayTime = 0;
		short int *pcm_buffer_pos;
		pcm_buffer_pos = (short int *)pcm_buffer[bufferIndex][i];

		to_write_len = len / self->GetBytePerSampleSize();
		
		// 틱을 저장한다.
		int tick = m_ims->GetCurrentTick();
		song_tick[bufferIndex][i] = tick;
				
		// 가사 레코드를 찾는다.
		Iss *m_iss = self->m_thread->GetIss();
		if ( m_iss->IsOpened() == true )
		{
			for(int x=m_lastLyricsRecord; x<m_iss->m_header.rec_count; x++)
			{
				// 가사 파일에는 본래의 tick을 8로 나눈 값이 들어가 있다.
				if ( m_iss->m_record[x].kasa_tick >= tick/8 )
				{
					m_lastLyricsRecord = x;
					lyrics_buffer[bufferIndex][i] = &m_iss->m_record[x];
					break;
				}
			}
		}
		else
		{
			lyrics_buffer[bufferIndex][i] = NULL;
		}

		// 애드립 PCM 데이타를 만들어서 버퍼에 저장한다.
		while (to_write_len > 0) 
		{
			if (remain_samples > 0) 
			{
				samples = remain_samples;
			}
			else 
			{
				// 분당 박자수
				int basicTempo = m_ims->GetBasicTempo();

				delayTime = m_ims->PlayEvent();

				MYADLIB_IMS *ims = m_ims->m_ims;

				// 총 몇개의 쌤플을 쓸것인지 계산한다.
				samples = MulDiv(22050 * 60, 
						delayTime, basicTempo * ims->header.nTickBeat);
			}

			if (samples > to_write_len) 
			{
				// 애드립 PCM 데이타를 만들어서 버퍼에 저장한다.
				YM3812UpdateOne(ym3812p, pcm_buffer_pos, to_write_len);
				remain_samples = samples - to_write_len;
				break;
			}
			else 
			{
				// 애드립 PCM 데이타를 만들어서 버퍼에 저장한다.
				YM3812UpdateOne(ym3812p, pcm_buffer_pos, samples);
				remain_samples = 0;
			}

			pcm_buffer_pos = pcm_buffer_pos + samples;
			to_write_len = to_write_len - samples;
		}

		if ( m_playMode == STOP || m_playMode == STOPPED || 
				m_playMode == SONG_END)
		{
			// 종료된 위치를 저장
			m_endBuffer = bufferIndex;
			m_endBufferIndex = i;
			return;
		}
	}
}
开发者ID:ktd2004,项目名称:imsplayer,代码行数:94,代码来源:Main.cpp


注:本文中的MainFrame::GetBytePerSampleSize方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。