add StaticSound.FromQOA
							parent
							
								
									6cd44c6f24
								
							
						
					
					
						commit
						8829b7bcc3
					
				| 
						 | 
					@ -197,6 +197,39 @@ namespace MoonWorks.Audio
 | 
				
			||||||
			return sound;
 | 
								return sound;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public static unsafe StaticSound FromQOA(AudioDevice device, string path)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
 | 
				
			||||||
 | 
								var fileDataPtr = NativeMemory.Alloc((nuint) fileStream.Length);
 | 
				
			||||||
 | 
								var fileDataSpan = new Span<byte>(fileDataPtr, (int) fileStream.Length);
 | 
				
			||||||
 | 
								fileStream.ReadExactly(fileDataSpan);
 | 
				
			||||||
 | 
								fileStream.Close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var qoaHandle = FAudio.qoa_open((char*) fileDataPtr, (uint) fileDataSpan.Length);
 | 
				
			||||||
 | 
								if (qoaHandle == 0)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									NativeMemory.Free(fileDataPtr);
 | 
				
			||||||
 | 
									Logger.LogError("Error opening QOA file!");
 | 
				
			||||||
 | 
									throw new AudioLoadException("Error opening QOA file!");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								FAudio.qoa_attributes(qoaHandle, out var channels, out var samplerate, out var samples_per_channel_per_frame, out var total_samples_per_channel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var buffer = FAudio.qoa_load(qoaHandle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return new StaticSound(
 | 
				
			||||||
 | 
									device,
 | 
				
			||||||
 | 
									1,
 | 
				
			||||||
 | 
									16,
 | 
				
			||||||
 | 
									(ushort) (channels * 2),
 | 
				
			||||||
 | 
									(ushort) channels,
 | 
				
			||||||
 | 
									samplerate,
 | 
				
			||||||
 | 
									(nint) buffer,
 | 
				
			||||||
 | 
									total_samples_per_channel * channels * sizeof(short),
 | 
				
			||||||
 | 
									true
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public StaticSound(
 | 
							public StaticSound(
 | 
				
			||||||
			AudioDevice device,
 | 
								AudioDevice device,
 | 
				
			||||||
			ushort formatTag,
 | 
								ushort formatTag,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue