// File: jp-myk[P]WAVUtil/src/SimpleWAV/WAV.cpp
// Function: WAV::setData(void const*, unsigned int)
int WAV::setData(const void *data, unsigned int dataSize){
  //freeWAVData(); // 初期化
  _dataSize=dataSize;
  _size=_dataSize+36;
  //モノラルならサンプル数を、ステレオなら左右１サンプルずつの組の数
  _sampleCount=_dataSize / (_channels*(_bit/8));
  _monoral8=(Monoral8*)NULL;
  _monoral16=(Monoral16*)NULL;
  _stereo8=(Stereo8*)NULL;
  _stereo16=(Stereo16*)NULL;
  try{
    if(_channels==1){
      if(_bit==8){
	_monoral8=(Monoral8*)malloc(dataSize);
	memcpy((void*)_monoral8, data, dataSize);
	//_monoral8=(Monoral8*)data;
      }else if(_bit==16){
	_monoral16=(Monoral16*)malloc(dataSize);
	memcpy((void*)_monoral16, data, dataSize);
	//_monoral16=(Monoral16*)data;
      }else{
	return -1;
      }
    }else   if(_channels==2){
      // ToDO LR insert data
      if(_bit==8){
	_stereo8=(Stereo8*)malloc(dataSize);
	memcpy((void*)_stereo8, data, dataSize);
	//_stereo8=(Stereo8*)data;
	
      }else if(_bit==16){
	_stereo16=(Stereo16*)malloc(dataSize);
	memcpy((void*)_stereo16, data, dataSize);
	//_stereo16=(Stereo16*)data;
      }else{
	return -1;
      }
    }else{
      return -1;
    }
  }catch(const char* e){
    std::cout << "malloc error" << std::endl;
    exit(-1);
  }

  return 0;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movl -0x1c(%rbp), %ecx
movl %ecx, 0x28(%rax)
movl 0x28(%rax), %ecx
addl $0x24, %ecx
movl %ecx, 0x4(%rax)
movl 0x28(%rax), %ecx
movl %ecx, -0x2c(%rbp)
movzwl 0x16(%rax), %ecx
movzwl 0x22(%rax), %eax
movl $0x8, %esi
cltd
idivl %esi
movl %eax, %edx
movl -0x2c(%rbp), %eax
imull %edx, %ecx
xorl %edx, %edx
divl %ecx
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, %ecx
movq %rcx, 0x30(%rax)
movq $0x0, 0x38(%rax)
movq $0x0, 0x40(%rax)
movq $0x0, 0x48(%rax)
movq $0x0, 0x50(%rax)
movzwl 0x16(%rax), %eax
cmpl $0x1, %eax
jne 0x2670
movq -0x28(%rbp), %rax
movzwl 0x22(%rax), %eax
cmpl $0x8, %eax
jne 0x2627
movl -0x1c(%rbp), %eax
movl %eax, %edi
callq 0x2180
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x38(%rax)
movq 0x38(%rax), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %eax
movl %eax, %edx
callq 0x20e0
jmp 0x266b
movq -0x28(%rbp), %rax
movzwl 0x22(%rax), %eax
cmpl $0x10, %eax
jne 0x265d
movl -0x1c(%rbp), %eax
movl %eax, %edi
callq 0x2180
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x40(%rax)
movq 0x40(%rax), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %eax
movl %eax, %edx
callq 0x20e0
jmp 0x2669
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x2708
jmp 0x266b
jmp 0x2701
movq -0x28(%rbp), %rax
movzwl 0x16(%rax), %eax
cmpl $0x2, %eax
jne 0x26f6
movq -0x28(%rbp), %rax
movzwl 0x22(%rax), %eax
cmpl $0x8, %eax
jne 0x26b3
movl -0x1c(%rbp), %eax
movl %eax, %edi
callq 0x2180
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movq 0x48(%rax), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %eax
movl %eax, %edx
callq 0x20e0
jmp 0x26f4
movq -0x28(%rbp), %rax
movzwl 0x22(%rax), %eax
cmpl $0x10, %eax
jne 0x26e9
movl -0x1c(%rbp), %eax
movl %eax, %edi
callq 0x2180
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x50(%rax)
movq 0x50(%rax), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %eax
movl %eax, %edx
callq 0x20e0
jmp 0x26f2
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x2708
jmp 0x26f4
jmp 0x26ff
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x2708
jmp 0x2701
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)