У меня проблема с модульным тестированием функции, использующей PinkNoiseGenerator от NAudio.
Поведение функции createPinkNoiseGeneratorLists, по-видимому, во время пошагового выполнения программы выглядит примерно так, как и ожидалось, то есть, что receiveGeneratorList (см. Ниже) заполнен списками PinkNoiseGenerators, каждый из которых содержит список примеров, которые, решающее значение имеют все значения:
![Stepping Through](https://i.stack.imgur.com/2h2Gi.png)
Проблема возникает при переходе через функцию. ReceiveGeneratorList по-прежнему заполнен списками PinkNoiseGenerators, но образцы имеют одинаковую ценность:
![Stepping Over](https://i.stack.imgur.com/D7fwV.png)
Второе поведение нежелательно. Мне нужно, чтобы генераторы розового шума оценивались по-разному, как при тестировании, так и при запуске программы. Я сузил поведение до следующего вложенного цикла for (полный код внизу):
for (int j = 0; j < receiverList[i].AmplitudeCurveList.Count; j++)
{
// Calculate duration of pink noise in seconds
double time = receiverList[i].AmplitudeCurveList[j].Count / (double)sampleRate;
// Instantiate new generator (list of pink noise samples) at given duration
PinkNoiseGenerator generator = new PinkNoiseGenerator(time, sampleRate, outputFileName, numberOfChannels);
// Add generator to generator list which will then be added to the list of lists of pink noise generators,
generatorList.Add(generator);
}
Я не вижу ничего сразу неправильного в коде - может ли это быть проблемой синхронизации с NAudio? Я гуглил проблему, которая кажется довольно редкой, но люди, которые испытывали подобное, иногда получают ответы, связанные с многопоточностью - я сам не использую многопоточность, но по общему признанию, некоторые могут происходить «под капотом» в NAudio .
Я также просматривал «похожие вопросы» на боковой панели, и они в основном не похожи. Этот главный ответ на вопрос намекает на проблему с затравкой - я думал, что подобное может быть виновато в моей проблеме, и понимаю концепцию, но я не уверен, как применить ее к моей конкретной проблеме - может ли моя проблема быть делать с тем, как посеян розовый шум? Я действительно не уверен, как отладить такую ошибку.
Моя система работает:
Windows 7, 64-разрядная
VS2013 v12.0.21005.1
NET v4.6.01055
Ниже приведен полный код теста / функции, если это поможет решить проблему:
Вот (сокращенный) тестовый класс:
[TestMethod]
public void testPinkNoise()
{
string outputFileName = @"C:\Users\Mick\Test\\Output\Test.wav";
int numberOfChannels = 1;
int sampleRate = 1000;
// Act
// Problem with identical PinkNoiseGenerators occurs here -> timing issue with NAudio?
receiverGeneratorList = scene.createPinkNoiseGeneratorLists(sampleRate, outputFileName, numberOfChannels);
}
А вот и сама функция (для записи, я знаю, что имена переменных сбивают с толку, и функция в целом остро нуждается в рефакторинге для ясности / читабельности, что со своими списками списков кривых и еще много чего) я еще не дошел до этого):
public List<List<PinkNoiseGenerator>> createPinkNoiseGeneratorLists(int sampleRate, string outputFileName, int numberOfChannels)
{
// Initialise list of lists of pink noise samples
List<List<PinkNoiseGenerator>> receiverGeneratorList = new List<List<PinkNoiseGenerator>>();
for (int i = 0; i < receiverList.Count; i++)
{
List<PinkNoiseGenerator> generatorList = new List<PinkNoiseGenerator>();
// For every amplitude curve within the receiver, generate a corresponding pink noise curve
for (int j = 0; j < receiverList[i].AmplitudeCurveList.Count; j++)
{
// Calculate duration of pink noise in seconds
double time = receiverList[i].AmplitudeCurveList[j].Count / (double)sampleRate;
// Instantiate new generator (list of pink noise samples) at given duration
PinkNoiseGenerator generator = new PinkNoiseGenerator(time, sampleRate, outputFileName, numberOfChannels);
// Add generator to generator list which will then be added to the list of lists of pink noise curves,
generatorList.Add(generator);
}
// Add list of pink noise curves
receiverGeneratorList.Add(generatorList);
}
return receiverGeneratorList;
}