Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2015, 16:46   #1
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию Как освободить память от типа Audio?

пишу код воспроизведения mp3
Dim muz As New Audio("qw.mp3")
muz.Play()
звук не завершился еще я его воспроизвожу
заново и на фоне 1 играет 2 все ок. вот только
память системы жрет. muz.Stop() не
помогает

Диспетчер задач грузит память до 450 мб и
потом приложение зависает с ошибкой об
нехватки памяти
reyn90 вне форума Ответить с цитированием
Старый 26.12.2015, 17:15   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

mp3? Разве он не только wav умеет?

Как именно воспроизводите? Весь код покажите.

Еще есть класс SoundPlayer https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.12.2015, 18:12   #3
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
mp3? Разве он не только wav умеет?

Как именно воспроизводите? Весь код покажите.
Код:
    Function playmuz2()
        sluchmuz(1, 12)
        Dim muzpiro2 As New Audio("Pyrotechnics\Fly petard\1." & randmuz & ".mp3")
        If muzpiro2.Playing Then
            muzpiro2.Stop()
            'muzpiro2 = Nothing
            muzpiro2.Play()
        Else
            muzpiro2.Play()
        End If

        AddHandler muzpiro2.Ending, AddressOf muzpiro2.Stop
        Return True
    End Function
    Function playmuz3()
        sluchmuz(1, 3)
        Dim muzpiro3 As New Audio("Pyrotechnics\fountain\" & randmuz & ".mp3")
        If muzpiro3.Playing Then
            muzpiro3.Stop()
            muzpiro3 = Nothing
            muzpiro3.Play()
        Else
            muzpiro3.Play()
        End If

        AddHandler muzpiro3.Ending, AddressOf muzpiro3.Stop
        Return True
    End Function
    '+++++++++++++++++++++++++++++
    Function checkpiro()
        If piro2 = True Then
            playmuz2()
        End If
        If piro3 = True Then
            playmuz3()
        End If
        
    End Function

    
    Function sekund()
        sek -= 1
        If sek < 0 Then

            checkintsek()
            sek = intsek
            Label2.Text = rand / 10 'УБРАТЬ ПРИ ОШИБКЕ / 10
            intsek = rand
            '+++++++++++++++++++++++++++
            checkpiro()
            '+++++++++++++++++++++++++++
        End If
        Return True
    End Function

    Function minit()
        sek -= 1
        If sek < 0 Then
            sek = intsek
            minut -= 1
        End If
        If minut <= 0 Then

            checkintminut()
            Label2.Text = rand
            intmin = rand
            minut = intmin
            '+++++++++++++++++++++++++++
            checkpiro()
            '+++++++++++++++++++++++++++
        End If
        Return True
    End Function


    Function check()
        If ComboBox1.Text = "Секундный режим" Then
            'intsek = 600 'NumericUpDown1.Value
            checkintsek()
            Label2.Text = rand / 10 'УБРАТЬ ПРИ ОШИБКЕ / 10
            intsek = rand
            'intmin = 60
            sek = intsek

            '  minut = 0
            'chas = 0
        ElseIf ComboBox1.Text = "Минутный режим" Then
            intsek = 600 'NumericUpDown1.Value
            checkintminut()
            Label2.Text = rand
            intmin = rand
            minut = intmin

        Else
            MsgBox("Ошибка")
        End If
        Return True
    End Function

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click


       

        If Button2.Text = "Старт" Then
            Button2.Text = "Стоп"
            check()
            ComboBox1.Enabled = False
            Timer1.Start()

            If ComboBox1.SelectedIndex = 1 Then
                checkintminut()
                Label2.Text = rand
                intmin = rand
            Else
                checkintsek()
                Label2.Text = rand / 10 'УБРАТЬ ПРИ ОШИБКЕ / 10
                intsek = rand
            End If
        ElseIf Button2.Text = "Стоп" Then
            Button2.Text = "Старт"
            ComboBox1.Enabled = True
            Timer1.Stop()
        End If


        'AddHandler petard2.Ending, AddressOf petard2.Stop
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If ComboBox1.Text = "Секундный режим" Then
            sekund()
            Label1.Text = "" & sek / 10
            ToolStripMenuItem1.Text = "Залп через " & sek / 10

        ElseIf ComboBox1.Text = "Минутный режим" Then
            minit()
            Label1.Text = "" & minut & ":" & sek / 10
            ToolStripMenuItem1.Text = "Залп через " & minut & ":" & sek / 10
        Else
            MsgBox("Ошибка")
        End If

        choicepiro()
        'timer.Second
        ' If CheckBox9.Checked = True Then
        'fonmuz = 1
        ' End If

    End Sub

    
End Class
Код сократил до 5000 символов(сайт ругается) Код эксперементальный сильно не пинать
reyn90 вне форума Ответить с цитированием
Старый 26.12.2015, 19:10   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Код:
        Dim muzpiro3 As New Audio("Pyrotechnics\fountain\" & randmuz & ".mp3")
        If muzpiro3.Playing Then
Разве этот if имеет смысл? Вы ж каждый раз новый объект создаете.

Скорее всего вам надо было вместо этого создать его один раз и хранить в переменной класса и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.12.2015, 21:09   #5
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Разве этот if имеет смысл? Вы ж каждый раз новый объект создаете.

Скорее всего вам надо было вместо этого создать его один раз и хранить в переменной класса и т.п.
да я так тоже делал. не помогло. а вот без new ругается
reyn90 вне форума Ответить с цитированием
Старый 26.12.2015, 21:42   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что без new?

Есть 2 варианта: создавать каждый раз новый объект (как тут) либо создать его один раз (при запуске программы и т.п.), сохранить ссылку в "более глобальной" переменной (например поле класса) вместо локальной переменной функции и использовать его без пересоздания.

"без new" не бывает, скорее всего вы пытаетесь сделать что-то странное и стоит почитать учебник про основы языка.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.12.2015, 23:21   #7
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что без new?

Есть 2 варианта: создавать каждый раз новый объект (как тут) либо создать его один раз (при запуске программы и т.п.), сохранить ссылку в "более глобальной" переменной (например поле класса) вместо локальной переменной функции и использовать его без пересоздания.

"без new" не бывает, скорее всего вы пытаетесь сделать что-то странное и стоит почитать учебник про основы языка.
Ооо спасибо за совет. Все получилось.
В загрузку формы добавил:
Код:
muzpiro2 = Microsoft.DirectX.AudioVideoPlayback.Audio.FromFile("Pyrotechnics\Fly petard\1.1.mp3")
        muzpiro3 = Microsoft.DirectX.AudioVideoPlayback.Audio.FromFile("Pyrotechnics\fountain\1.mp3")
А и функции исправил на:
Код:
Function playmuz2()
        sluchmuz(1, 12)
        muzpiro2.Open("Pyrotechnics\Fly petard\1." & randmuz & ".mp3")
        muzpiro2.Play()
        AddHandler muzpiro2.Ending, AddressOf muzpiro2.Stop
        Return True
    End Function
    Function playmuz3()
        sluchmuz(1, 3)
        muzpiro3.Open("Pyrotechnics\fountain\" & randmuz & ".mp3")
        muzpiro3.Play()
        AddHandler muzpiro3.Ending, AddressOf muzpiro3.Stop
        Return True
    End Function
Теперь максимум 35 мб ест прога.
reyn90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освободить память после потока SPLER Общие вопросы Delphi 7 06.06.2014 02:08
Освободить память формы st_yak C++ Builder 0 21.12.2013 19:56
Как создать форму в ручную и освободить из памяти предыдущую форму, на С++Builder 2009? AndreyK Общие вопросы C/C++ 1 18.01.2012 20:54
Освободить память от CEdit Eros Общие вопросы C/C++ 0 29.11.2010 15:37
Как использовать OGG Video\Audio Alex Cones Мультимедиа в Delphi 2 30.06.2010 15:02