Трекбар C # NAudio

Я работаю с плеером с NAudio, см. http://naudio.codeplex.com/wikipage?title=MP3. Все работало нормально, но когда я кодирую трекбар, который показывает текущее время и продолжительность, я даже могу искать в любой позиции песни, поэтому я использовал таймер, чтобы обновить текущее время с помощью mainOutputStream.CurrentTime, но формат выглядит плохо, затем я переформатировал его так:

string curTime = mainOutputStream.CurrentTime.ToString();
string[] format = curTime.Split(':');
format[2] = format[2].Remove(2);
curTime = format[1] + format[2];

но format[2] = format[2].Remove(2); всегда возвращает ошибку. И, похоже, нет способа получить продолжительность даже в промежутке времени, кроме байтов, но мне не нравится использовать averageBytePerSecond или что-то в этом роде, так что есть ли способ сделать эти задания проще и лучше? Все переменные, как в ссылке выше

Спасибо.

РЕДАКТИРОВАТЬ: проблемы решены ~ Я использовал этот метод:
Получить продолжительность:

string duration = mainOutputStream.TotalTime.ToString("mm\\:ss");
trackPosition.Maximum = (int)mainOutputStream.TotalTime.TotalSeconds;

Получить текущее время:

string curTime = mainOutputStream.CurrentTime.ToString("mm\\:ss");
trackPosition.Value = (int)mainOutputStream.CurrentTime.TotalSeconds;

person giiYanJ    schedule 03.12.2012    source источник
comment
Какой тип объекта CurrentTime, какой формат он восстанавливает и какой формат вам нужен?   -  person sa_ddam213    schedule 03.12.2012
comment
это timespan, я помещаю его в трекбар, поэтому мне нужно int.   -  person giiYanJ    schedule 03.12.2012
comment
да, но мне все равно нужно обозначить это так 02:44.   -  person giiYanJ    schedule 03.12.2012


Ответы (1)


Попробуй это:

string curTimeString = mainOutputStream.CurrentTime.ToString("mm\\:ss");
int curTimeSeconds =  (int)mainOutputStream.CurrentTime.TotalSeconds;

первый форматируется только на минуты и секунды, если ваши звуковые дорожки больше, вам придется добавить другое форматирование.

Дополнительную информацию об этом можно найти здесь: Форматирование временного интервала

person sa_ddam213    schedule 03.12.2012
comment
CurrentTime.TotalSeconds - это 'double', а за ним стоит десятичная дробь, так или иначе, чтобы удалить это? - person giiYanJ; 03.12.2012
comment
opps, извините, я забыл преобразовать как int, исправлено выше - person sa_ddam213; 03.12.2012
comment
воах, работал как бог! Как насчет продолжительности? mainOutputStream.Length дает только байты, каким-либо способом рассчитать продолжительность, но не среднее количество байтов / сек? РЕДАКТИРОВАТЬ: только что обнаружил, что там есть объект TotalTime, промежуток времени, хорошо. - person giiYanJ; 03.12.2012
comment
эээ ... есть небольшая проблема. string totalTime = mainOutputStream.TotalTime.TotalSeconds.ToString("ss"); int totalTimeSec = int.Parse(totalTime); Эти двое не работают ... - person giiYanJ; 03.12.2012
comment
mainOutputStream.TotalTime.TotalSeconds.ToString() вам не нужен этот формат для TotalSeconds - person sa_ddam213; 03.12.2012