/// <summary> /// Gets the collection of tags associated with the specified sound. /// </summary> private static SongTagCollection GetTags(FMOD_SOUND *sound, out String name, out String artist, out String album) { var numtags = 0; var result = default(FMOD_RESULT); result = FMOD_Sound_GetNumTags(sound, &numtags, null); if (result != FMOD_OK) { throw new FMODException(result); } var tags = new SongTagCollection(); for (int i = 0; i < numtags; i++) { var tag = GetTag(sound, i); if (tag != null) { tags.Add(tag); } } name = tags["name"]?.Value ?? tags["title"]?.Value; artist = tags["artist"]?.Value; album = tags["album"]?.Value; return(tags); }
/// <summary> /// Gets the duration of the specified sound. /// </summary> private static TimeSpan GetDuration(FMOD_SOUND *sound) { var durationInMilliseconds = 0u; var result = FMOD_Sound_GetLength(sound, &durationInMilliseconds, FMOD_TIMEUNIT.FMOD_TIMEUNIT_MS); if (result != FMOD_OK) { throw new FMODException(result); } return(TimeSpan.FromMilliseconds(durationInMilliseconds)); }
public static FMOD_RESULT FMOD_Sound_Release(FMOD_SOUND *sound) => pFMOD_Sound_Release(sound);
public override sealed FMOD_RESULT FMOD_Sound_GetNumTags(FMOD_SOUND *sound, Int32 *numtags, Int32 *numtagsupdated) => INTERNAL_FMOD_Sound_GetNumTags(sound, numtags, numtagsupdated);
public static extern FMOD_RESULT FMOD_Sound_Release(FMOD_SOUND *sound);
public abstract FMOD_RESULT FMOD_Sound_GetNumTags(FMOD_SOUND *sound, Int32 *numtags, Int32 *numtagsupdated);
public abstract FMOD_RESULT FMOD_Sound_Release(FMOD_SOUND *sound);
/// <inheritdoc cref="SongPlayer.Play(Song, Single, Single, Single, Boolean)"/> public Boolean Play(FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, TimeSpan duration, Single volume, Single pitch, Single pan, Boolean loop = false) { return(PlayInternal(sound, channelgroup, duration, volume, pitch, pan, loop ? TimeSpan.Zero : (TimeSpan?)null, null)); }
public abstract FMOD_RESULT FMOD_System_PlaySound(FMOD_SYSTEM *system, FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, Boolean paused, FMOD_CHANNEL **channel);
public override sealed FMOD_RESULT FMOD_System_PlaySound(FMOD_SYSTEM *system, FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, Boolean paused, FMOD_CHANNEL **channel) => INTERNAL_FMOD_System_PlaySound(system, sound, channelgroup, paused, channel);
public static FMOD_RESULT FMOD_System_PlaySound(FMOD_SYSTEM *system, FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, Boolean paused, FMOD_CHANNEL **channel) => pFMOD_System_PlaySound(system, sound, channelgroup, paused, channel);
public override sealed FMOD_RESULT FMOD_Sound_Release(FMOD_SOUND *sound) => INTERNAL_FMOD_Sound_Release(sound);
private static extern FMOD_RESULT INTERNAL_FMOD_System_PlaySound(FMOD_SYSTEM *system, FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, Boolean paused, FMOD_CHANNEL **channel);
private static extern FMOD_RESULT INTERNAL_FMOD_Sound_Release(FMOD_SOUND *sound);
public override sealed FMOD_RESULT FMOD_Sound_GetTag(FMOD_SOUND *sound, String name, Int32 index, FMOD_TAG *tag) => INTERNAL_FMOD_Sound_GetTag(sound, name, index, tag);
private static extern FMOD_RESULT INTERNAL_FMOD_Sound_GetTag(FMOD_SOUND *sound, [MarshalAs(UnmanagedType.LPStr)] String name, Int32 index, FMOD_TAG *tag);
/// <inheritdoc cref="SongPlayer.Play(Song, Boolean)"/> public Boolean Play(FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, TimeSpan duration, Boolean loop = false) { return(PlayInternal(sound, channelgroup, duration, 1f, 0f, 0f, loop ? TimeSpan.Zero : (TimeSpan?)null, null)); }
public static extern FMOD_RESULT FMOD_Sound_GetLength(FMOD_SOUND *sound, UInt32 *length, FMOD_TIMEUNIT lengthtype);
/// <inheritdoc cref="SongPlayer.Play(Song, TimeSpan, TimeSpan?)"/> public Boolean Play(FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, TimeSpan duration, TimeSpan loopStart, TimeSpan?loopLength) { return(PlayInternal(sound, channelgroup, duration, 1f, 0f, 0f, loopStart, loopLength ?? Duration - loopStart)); }
public static FMOD_RESULT FMOD_Sound_GetLength(FMOD_SOUND *sound, UInt32 *length, FMOD_TIMEUNIT lengthtype) => pFMOD_Sound_GetLength(sound, length, lengthtype);
/// <inheritdoc cref="SongPlayer.Play(Song, Single, Single, Single, TimeSpan, TimeSpan?)"/> public Boolean Play(FMOD_SOUND *sound, FMOD_CHANNELGROUP *channelgroup, TimeSpan duration, Single volume, Single pitch, Single pan, TimeSpan loopStart, TimeSpan?loopLength) { return(PlayInternal(sound, channelgroup, duration, volume, pitch, pan, loopStart, loopLength ?? Duration - loopStart)); }
public static extern FMOD_RESULT FMOD_Sound_GetNumTags(FMOD_SOUND *sound, Int32 *numtags, Int32 *numtagsupdated);
public abstract FMOD_RESULT FMOD_Sound_GetLength(FMOD_SOUND *sound, UInt32 *length, FMOD_TIMEUNIT lengthtype);
/// <summary> /// Gets the tag at the specified index within the specified sound. /// </summary> private static SongTag GetTag(FMOD_SOUND *sound, Int32 index) { var tag = default(FMOD_TAG); var result = default(FMOD_RESULT); result = FMOD_Sound_GetTag(sound, null, index, &tag); if (result != FMOD_OK) { throw new FMODException(result); } var tagname = Marshal.PtrToStringAnsi(tag.name); var tagvalue = String.Empty; String GetTagString(IntPtr ptr, UInt32 length, Encoding encoding) { var buffer = new byte[length]; for (int offset = 0; offset < length; offset++) { buffer[offset] = Marshal.ReadByte(ptr, offset); } var str = encoding.GetString(buffer); var nul = str.IndexOf('\0'); return(nul < 0 ? str : str.Substring(0, nul)); } switch (tag.datatype) { case FMOD_TAGDATATYPE_INT: tagvalue = (*(int *)tag.data).ToString(); break; case FMOD_TAGDATATYPE_FLOAT: tagvalue = (*(float *)tag.data).ToString(); break; case FMOD_TAGDATATYPE_STRING: tagvalue = GetTagString(tag.data, tag.datalen, Encoding.ASCII); break; case FMOD_TAGDATATYPE_STRING_UTF16: tagvalue = GetTagString(tag.data, tag.datalen, Encoding.Unicode); break; case FMOD_TAGDATATYPE_STRING_UTF16BE: tagvalue = GetTagString(tag.data, tag.datalen, Encoding.BigEndianUnicode); break; case FMOD_TAGDATATYPE_STRING_UTF8: tagvalue = GetTagString(tag.data, tag.datalen, Encoding.UTF8); break; default: return(null); } return(new SongTag(tagname, tagvalue)); }
public abstract FMOD_RESULT FMOD_Sound_GetTag(FMOD_SOUND *sound, String name, Int32 index, FMOD_TAG *tag);
public override sealed FMOD_RESULT FMOD_Sound_GetLength(FMOD_SOUND *sound, UInt32 *length, FMOD_TIMEUNIT lengthtype) => INTERNAL_FMOD_Sound_GetLength(sound, length, lengthtype);
public static FMOD_RESULT FMOD_Sound_GetNumTags(FMOD_SOUND *sound, Int32 *numtags, Int32 *numtagsupdated) => pFMOD_Sound_GetNumTags(sound, numtags, numtagsupdated);
private static extern FMOD_RESULT INTERNAL_FMOD_Sound_GetNumTags(FMOD_SOUND *sound, Int32 *numtags, Int32 *numtagsupdated);
public static FMOD_RESULT FMOD_Sound_GetTag(FMOD_SOUND *sound, [MarshalAs(UnmanagedType.LPStr)] String name, Int32 index, FMOD_TAG *tag) => pFMOD_Sound_GetTag(sound, name, index, tag);
private static extern FMOD_RESULT INTERNAL_FMOD_Sound_GetLength(FMOD_SOUND *sound, UInt32 *length, FMOD_TIMEUNIT lengthtype);